Функция денесі

...

return (мәні);

}

return командасы программада қолданылатын функция мәндерін анықтайды, ол бірнешеу болуы да мүмкін, тіпті болмауы да мүмкін. Ол болмаса, функция ешқандай мән бермейді, мұндайда функцияны өрнектерге енгізуге болмайды. Мысалы, мәні жоқ функцияны меншіктеу командасында пайдалануға болмайды.

Функцияны шақыру (пайдалану) былай орындалады:

Функция_аты (үтірмен бөлінген нақты аргументтер тізімі)

Нақты аргументтер ретінде тұрақты, айнымалы, өрнек немесе сан қолданылады. F атауын функцияға дұрыс берілген атау деп айта алмаймыз, мұнда математикадағы сияқты функция бір әріппен белгіленген. Программалауда бір әріппен емес бір сөзбен белгілеу қалыптасқан, ол функция әрекетін білдіретін сөз болуы тиіс. Жоғарыда келтірілген мысалда DlinaChisla немесе LenOfNumber атаулары F атауына қарағанда түсініктірек болар еді. Функция аты шектелмейді, бірақ ол бір сөзден ғана тұруы тиіс (бос орын болмауы керек). Атау латын әріптері мен цифрлардан тұрады, астын сызу таңбасын қолдануға болады. Орыс, қазақ әріптерін пайдалануға болмайды. Атаудың алғашқы символы әріп немесе астын сызу таңбасы болуы керек. Әріптер регистрі бірдей болып қабылданбайды. Мысалы, «LenOfNumber» және «Lenofnumber» атаулары бірдей емес болып саналады.

«Жоғарыдан төмен қарай» жобалау

Функцияны бірнеше рет пайдаланғанда ғана, оның тиімділігі артады және оны әр түрлі программаларда пайдаланған дұрыс. Программалауда кітапханалық функциялар жиі қолданылады. Мәліметтерді енгізу/шығару, математикалық есептеулер, терезелер жасау, тышқан шертулерін өңдеу – көптеген программаларда кездеседі. Әрине, оларды бір рет дұрыстап программалап алу керек. Кейбір жиі орындалатын функциялар программалау жүйелерінде де қолданылады, мысалы, alert және prompt функциялары, олар браузердің өзінде кодталған. Дегенмен, функцияларды ең жиі әрі кең қолданылатын аймақ – программалар құру технологиясы, мұнда алдымен мәселені шешудің көп сатылы схемасы жобаланады да, әр сатысына жеке функция тағайындалады. Программалау сатының төменгі (түпкі) жағынан жоғары қарай біртіндеп жүргізіледі. Осылай жобалау тәсілі «шашыраңқы (нисходящая) технология» немесе «жоғарыдан төмен қарай» деп аталады. Ол адамның ойлау қабілетіне сәйкес етіп құрастырылған: біз жобаны барлық жағынан бірден қарастыра алмаймыз.

Бақылау сұрақтары:

1. JavaScript тілінің функциялары қалай жазылады?

2. Тұтынушы функциясы қай кезде қолданылады?

3. 10 санының квадрат түбірін жазыңыз.

4. х5 қалай жазылады?

5. х пен у-тің үлкенін анықтау қалай жазылады?

6. 5 санынынң натурал логарифмі қалай жазылады?

7. х пен у-тің кішісін анықтау қалай жазылады?

8. Жоғарыдан төмен қарай жобалау дегенді қалай түсінесіз?

Тапсырмалар:

1. Төрт сан енгізіп олардың үлкенін анықтауды, екі санның үлкенін анықтау функциясын қолданып программа құрыңыз.

2. Санды дәрежелеу функциясы арқылы кез келген енгізілген санның 5 дәрежесін анықтау программасын құрыңыз.

3. Үш таңбалы санның цифрларының қосындысын анықтау программасын құрыңыз.

4. sinx пен cosx/2 функциясының мәндерінің үлкенін анықтау программасын құрыңыз.

5. Кез келген енгізілген санның квадрат түбірін, квадратын, абсолют шамасын шығаратын программа құрыңыз.


4.9 Объект түсінігі

Объект – бұл мәліметтер мен функциялар жиынынан тұратын бірыңғай конструкция немесе JavaScript терминологиясы бойынша қасиеттер мен тәсілдер жиыны болып табылады.

Функция = тәсіл (метод).

Айнымалы = қасиет (свойства).

Инкапсуляция термині «қара жәшік» ретінде қарастырылатын объектінің ішкі құрылымын жасыру деген сөз. Объектінің қасиеттері белгілі болып саналады, яғни олар - сырттан қол жеткізуге болатын айнымалылар. Бірақ бұл функциялар қалай құрылған, олар қандай алгоритммен жұмыс істейді, ол туралы программалаушыға айтылмайды. Программалаушы немесе объектіні тұтынушы адам объектінің қосымша ішкі функциялары мен айнымалылары бар ма, олар қол жеткізуге болатын қасиеттер мен тәсілдермен қалай байланысқан, ол жағын білмейді.

Объект және объектінің бір данасы (экземпляры)

Мысалы, нақты телевизор – бұл JavaScript терминологиясы бойынша объект емес, ол объектінің бір данасы (экземпляры). Объект болып зауытта нақты өнім шығаруға арналған құжаттамалар жинағы саналады. Конвейерден шығып жатқан барлық телевизорлар бейнелерінің қасиеттері де оларды басқаратын тәсілдер де бірдей дана (экземпляр) болып табылады. Программалауда да дәл осылай болады. Объект – бұл шаблон, құжаттар жиыны, ал объектінің бір данасы (экземпляры) оның жұмыстық көшірмесі ғана болып табылады.

Объект интерфейсі және объектінің ішкі құрылымы

Rectangle объектісін қарастырайық. Rectangle объектісі тіктөртбұрыштармен жұмыс істеуге мүмкіндік береді. Объектінің бір данасын жасау үшін былай жазу керек:

var х = new Rectangle(a,b); // Мұндағы х Rectangle

// объектінің бір данасы (экземпляры).

// а мен b тіктөртбұрыш ені мен биіктігі.

// new сөзі бір дана жасау үшін керек.

Объектінің бір данасы жасалған соң, келесі тәсілдер мен қасиеттерді пайдалауға болады:

Қасиеттер: width, height; Тәсілдер square(), perimeter(), radius()

Пайдалану мысалы:

var p =х.perimeter();

var r = x.radius();

var m = x.width;

if(x.height > m)

m = x.height;

Мұнда объект интерфейсі келтірілген, яғни объектімен қатынасуға қажет ақпарат берілген.

Мұнда square, perimeter, radius функцияларының программалық кодтары келтірілмеген. Басқаша айтқанда, объектінің ішкі құрылымы көрсетілмеген. Жұмыс кезінде тек интерфейсті пайдаланып, оның ішкі құрылымын қажет етпеуге болады.

Объект интерфейсі – пайдалануға болатынобъектінің айнымалылары мен функциялары болып табылады.

Объектінің ішкі құрылымы – программалау тілінде объектінің ішкі айнымалылары мен функцияларын сипаттау.

JavaScript тілінде Rectangle объектісінің х данасының қасиеттері мен тәсілдері келесі түрде жазылады:

x.height; x.perimeter();

Жалпы жазылу форматы мынадай болады:

дана_аты.объект_қасиеті_не_тәсілі_

Нүкте – сатылы бөлу таңбасы: ол атасын баласынан (тегін мұрагерінен) бөліп тұрады.

Құрамдас ішкі объектілер және тұтынушы объектісі

JavaScript тілінде ішкі құрамдас объектілер көп. Оларды программалау қажет емес, олар программалау тілі ішінде орнатылған. Бұл – браузердің программалық кодына осы объектілер коды кіреді деген сөз. Программалаушы осы объектілердің интерфейсін білуі тиіс, олардың бір данасын жасай білу керек, сонда ол өз қалауынша ішкі объектілерді пайдалана алады.

JavaScript жаңа объектілерді программалауға және олардың ішкі объектілерін өзгертуге мүмкіндік береді. Енді бірнеше ішкі объектілер жұмысын қарастырайық.

Date объектісі

JavaScript тілінің ішкі объектілерін қарастыруды өте пайдалы болып саналатын Date объектісінен бастайық. Бұл объект күн, ай мерзімімен (датамен) және уақытпен жұмыс істеу үшін керек. Объект данасын жасау үшін (Date объектісінің ғана емес, одан басқасының да) JavaScript тілінде new түйінді сөзі қолданылады:

var now = new Date();

Енді now айнымалысы Date объектісі данасы болып табылады да, ол үстіміздегі мезгіл мен уақытты береді.

Жалпы дана жасау былай орындалады:

var айнымалы = new Date(параметрлер);

Келесі параметрлерді көрсетуге болады:

Мысалы:

var now = new Date();

var birthday =

new Date(1954,1,8);

var bell = new Date(2003,

0,14,12,20,0);

Date объектісі данасы құрылғаннан кейін, оның ішкі мәліметтерін көруге болады, оны өзгерту мүмкіндігі де бар. Ол үшін көптеген тәсілдер бар, олардың тізімі тілге арналған кітап қосымшаларында келтіріледі.

Объект тәсілі аты (тәсіл – JavaScript терминологиясында функция) дана атынан нүктемен бөлініп жазылады.

Былай жазуға болады:

var year = bell.getYear();

Date объектісінің бірнеше қарапайым скриптерін қарастырайық.

Ағымдағы мерзім және уақыт

var now = new Date();

alert("Бүгін:"+now.getDate()+"/"+ (now.getMonth()+1)+"/"+

now.getYear()+"\nҚазір: "+now.getHours() +":" + now.getMinutes());

Осы кодтарды жазған кезде скрипті орындау нәтижесінде мерзім мен уақытты көрсететін хабарлама шығады.

Жыл басынан бергі күндер саны

var now = new Date(); // Ағымдағы мерзім мен уақыт.

var begin = new Date(now.getYear(),0,1); // Ағымдағы жыл басы.

// жыл басы ішіндегі миллисекунд саны:

var num = now.getTime()-begin.getTime();

var msPerDay = 24 * 60 * 60 * 1000; // тәулік ішіндегі миллисекунд саны.

num /= msPerDay;

// жыл басынан бергі күннің саны.

// Нәтижесін көрсетеміз:

alert("Жыл басынан бері " + Math.floor(num) + " күн өтті");

Осы кодтарды жазған кезде скрипті орындау нәтижесі оң жақтағы суретте келтірілген

Date ішкі объектісі және оның тәсілдері

1. Тәсіл түрі – getYear(). Жыл нөмірінің соңғы екі цифрын береді.

Мысалы:

var d = new Date(2005,1,2);

var y = d.getYear();

alert(y);

2. Тәсіл түрі – setYear(). Жыл нөмірін тағайындайды.

Мысалы:

var d = new Date();

d.setYear(2004);

alert(d.getYear());

3. Тәсіл түрі – getMonth(). Ай нөмірі мәнін береді.

var d = new Date(2005,1,2);

var m = d.getMonth();

alert(m);

4. Тәсіл түрі – setMonth(). Айды енгізеді.

Мысалы:

var d = new Date();

d.setMonth(4);

alert(d.getMonth());

5. Тәсіл түрі – getDate(). Ай күнін береді.

var d = new Date(2005,1,2);

var m = d.getDate();

alert(m);

6. Тәсіл түрі – setDate(). Ай күнін енгізеді (тағайындайды).

Мысалы:

var d = new Date();

d.setDate(2);

alert(d.getDate());

7. Тәсіл түрі – getDay(). Апта күнін береді (жексенбі – 0, дүйсенбі – 1, …, сенбі - 6)

var d = new Date(2005,1,2);

var m = d.getDay();

alert(m);

8. Тәсіл түрі – getHours(). Уақыттың сағатын береді

var d = new Date();

var t = d.getHours();

alert(t);

9. Тәсіл түрі – setHours().

Сағатты енгізеді (тағайындайды).

Мысал:

var d = new Date();

d.setHours(22);

alert(d.getHours());

10.Тәсіл түрі – getMinutes(). Уақыт минутын береді.

var d = new Date();

var m = d.getMinutes();

alert(m);

11.Тәсіл түрі – setMinutes(). Уақыт минутын енгізеді.

var d = new Date();

d.setMinutes(32);

var t = d.getMinutes();

alert(t);

12.Тәсіл түрі – getTime().

1 янв 0 сағатынан 1970 ж. бергі миллисекунд мөлшерін береді.

Мысал:

var d = new Date();

var t = d.getTime();

alert(t);

Array объектісі

Бұл объект мәліметтер жиымын (массивін) жасау үшін керек. Жиым — элементтердің реттелген жиыны. Жеке элементтің орны оның аты мен индексін (нөмір) көрсету арқылы орындалады. JavaScript тілінде элементтерді нөмірлеу нөлден басталады.

Мысал: апта күндерінің аттары жиымы.

var dayNames = new Array("жексенбі", "дүйсенбі", "сейсенбі", "сәрсенбі", "бейсенбі", "жұма", "сенбі");

Жиымның жеке элементтерін пайдалану үшін былай жазылады:

массив__аты [индекс]

Төмендегі скрипт:

var day Names = new Array("жексенбі", "дүйсенбі", "сейсенбі", "сәрсенбі", "бейсенбі", "жұма","сенбі"); alert(dayNames[0]);

жұмысы нәтижесінде alert терезесіне «жексенбі» мәтіні шығады.

Мысалы: ағымдағы дата мен уақытты көрсету.

// Ай аттарын көрсету:

var monthNames = new Array ("қаңтар", "ақпан",

"наурыз","сәуір","мамыр","маусым","шілде", "тамыз",

"қыркүйек","қазан", "қараша", "желтоқсан");

// Апта күндері:

var dayNames = new Array ("жексенбі", "дүйсенбі", "сейсенбі", "сәрсенбі", "бейсенбі", "жұма","сенбі");

var today = new Date(); // Ағымдағы мерзім мен уақыт.

// Нәтижені шығаруға дайындау:

var str = "Бүгін: "

// Айдың күні:

str += today.getDate() + " ";

// айдың аты: str+=monthNames[today.getMonth()]+" ";

// жыл:

str += today.getYear() + " года, ";

// Апта күні:

str += dayNames[today.getDay()] + "\n";

// Уақыт:

str += "Бүгін: " + today.getHours() + ":" +

today.getMinutes () +":"+

today.getSeconds();

// Нәтижені шығару:

alert(str);

Жиым ұзындығы (оның элементтерінің саны) программа жұмысы кезінде өзгере алады:

var f = new Array(); //Қазір жиым бос,

//оның элементі жоқ.

f[0] = 1; //Жиымда бір элемент бар.

f[l] = 1; //Жиымда екі элемент бар.

f[2] = f[0] + f[1]; //Жиымда үш элемент бар.

f[5] = 8; //Жиымда алты элемент бар

// f[0]...f[5]

Мысал: Жиымның ең үлкен элементін анықтау.

// num кездейсоқ сандардан жиым құрайық,

// олардың әрқайсысы [a, b] аралығында жатады

var num = 10; // кездейсоқ сандардың саны

var a = 1; // аралықтың сол жақ шекарасы

var b = 100; //аралықтың оң жақ шекарасы

var set = new Array(); // жиым құрылды

// жиымды кездейсоқ сандармен толтыру

for (i=0; i<num; i++)

set[i] = Math.round(a+(b-a)*Math.random());

// Ең үлкен элементін анықтау

var max = a;

for (i=0; i<num; i++)

if(set[i] > max) max = set[i];

// Жиым элементтері мен үлкен элементін көрсетейік:

alert("Жиым: "+set+"\n Олардың ішіндегі үлкен элементі: "+max);

Қарастырылған мысалда екі цикл бір циклге біріктірілген:

var max = a;

for(i = 0; i < num; i ++}

{

set[i]-Math.floor(a+(b-a+1)*Math.random());

if(set[i] > max) max = set[i];

}

Осыған дейін біз объектілер тәсілдерімен танысқанымен, олардың қасиеттерін қарастырмадық. Объект қасиеттері дегеніміз – JavaScript терминологиясы бойынша объект тұтынушысына арналған интерфейстік айнымалылар болып табылады. Негізінде, мұнда объект туралы емес, тек объектінің нақты данасы жайлы сөз болады. Қасиеттерді пайдалану үшін объект қасиеті аты мен нүкте арқылы бөлінген қасиет аты жазылады, мысалы:

var set = new Array("Алпамысов","Азамат", "Адамұлы");

alert (set.length);

length қасиеті массив элементтерінің санын – оның ұзындығын береді.

JavaScript тілінде объектілермен жұмыс істеу кезінде бірсыпыра «еркіндіктерге» жол беріледі. Мысалы, массив данасын new түйінді сөзінсіз және Array объектісін де көрсетпей жазуға болады:

var set = [1, 4, 9, 16, 25, 36];

Әрине, браузер, мұндай жазбаны кездестіріп, бәрібір Array объект данасын төмендегі жазба түрінде ашады:

var set = new Array(1, 4, 9, 16, 25, 36);

Осыған дейін біз string объектісі данасын басқа тәсілдермен құрған болатынбыз. Мысалы,

var title = "Ақыл арымас, алтын шірімес"; жазбасы

төмендегі жазбамен бірдей болып табылады:

var title = new String("Ақыл арымас, алтын шірімес");

JavaScript ішкі объектілерімен жұмыс істеу үшін анықтамалық материалдар болғаны дұрыс, олар көбінесе кітап қосымшаларында келтіріледі.

Мысалы: Енгізілген суреттің қасиеттерін (енін, биіктігін, жақтауының қалыңдығын) өзгертіп, экранда бақылауға болатын программа құрайық.

<HTML>

<HEAD>

<TITLE> Бейне қасиеттерін зерттеу </TITLE>

<script>

function chpict(obj)

{ var w=obj.wd.value

var h= obj.hg.value

if (w!=0) document.mypict.width=w

if (h!=0) document.mypict.height=h

document.mypict.border=obj.br.value

document.mypict.alt=obj.al.value

}

</script>

</HEAD>

<BODY bgcolor="F8F8FF">

<CENTER>

Енгізілетін бейне

<IMG src=111.jpg name=mypict>

<FORM name="form1">

Бейне өлшемін өзгерту үшін бір немесе екі параметрді енгізіп, КӨРУ батырмасын шертіңіз><br>

Ені (width): <input type="text" name="wd" size=8><br>

биіктігі (height): <input type="text" name="hg" size=8><br>

Жақтау өлшемін өзгерту үшін жақтау қалыңдығын пиксел өлшемімен ензізіп, КӨРУ батырмасын шертіңіз<br>

жақтау қалыңдығы (border): <input type="text" name="br"

size=8 value=0><br>

Байқау мәтініні (alt): <input type="text"

name="al" size=40><P>

<input type="button" value= "Көру" onclick="chpict(form1)">

<input type="reset" value="Болдырмау">

</FORM>

</CENTER>

</BODY>

</HTML>

4.9.1. Объектілік бағытталған программалау

Объектілік бағытталған программалау – программалық кодтар жасаудың қазіргі тәсілі, ол құрылымдық программалаудан кейін дамыды. Объектілік бағытталған программалау құрылымдық программалауды алмастырған жоқ, ол оны ары қарай логикалық жетілдіру кезеңінен өткізді.

Құрылымдық программалаудың негізі есепті шешудің сатылы бұтақ тәріздес құрылымын жасау және оның программалық кодын жекелеп жазып шығу болып табылады. Құрылымдық программалаушылар бір логикалық бірлікке қатысты процедуралар мен мәліметтерді жеке файлға құрылым (Си-де struct) арқылы жинақтай отырып жасап шығады.

Объектілік бағытталған программалау ортасында тек жаңа мәліметтерді құруға емес, оларды өңдеу функциялармен біріктіруге мүмкіндік беріледі. JavaScript тілінде ол объект деп аталады.

Мысалы:

// Rectangle объектісінің құрылымы.

function Rectangle(a, b)

{ // Объект қасиеттерінің сипатталуы.

this.a = а; // тіктөртбұрыш ені,

this.b = b; // тіктөртбұрыш биіктігі. }

// Rectangle объектісі құжаттамасының соңы.

Бұл мысалда Rectangle объектісі С++ тіліндегі құрылым сияқты сипатталған. Бұл объектіде мәлімет бар болғанымен, функцияның өзі жоқ. Сондықтан жаңа тіктөртбұрыш қажет болғанда, оны былай анықтауға болады:

var rec = new Rectangle(10,20);

// rec объектісінің данасы құрылды.

Кейіннен rec айнымалысы мәнін өрнектерде пайдалануға болады:

var perimeter = 2 * (rec.a + rec.b);

// тіктөртбұрыш периметрі.

Объект данасын функция аргументі ретінде де пайдалануға болады:

function Perimeter(x)

{ return 2 * (x.a + x.b); }

var p = Perimeter(rec);

Осы объектіге оның мәліметтерін өңдейтін функция (тәсіл) қосайық.

Мысалы:

// Rectangle объектісі.

// Объект құрылымы.

function Rectangle(a,b)

{ // Объект қасиеттерінің сипатталуы

this.а = а; // Тіктөртбұрыш ені
this.b = b; // Тіктөртбұрыш биіктігі

// Объект тәсілдерінің (функцияларының) сипатталуы

this.perimeter = _perimeter;

// _perimeter функциясына сілтеме

}

// perimeter тәсілінің сипатталлуы.

function _perimeter()

{ return 2 * (this.a + this.b); }

//-- Rectangle объектісі құжаттамасының соңы

Енді Rectangle объектісі тек мәліметтерден ғана емес, функциядан да тұрады. Мынадай код жазуға болады:

// Бірінші тіктөртбұрышты құрайық:

var p1 = new Rectangle(10,20);

// екінші тіктөртбұрышты құрайық:

var р2 = new Rectangle(35,70);

// периметрлер қосындысын табайық:

var sum = p1.perimeter() + p2.perimeter();

perimeter тәсілін анықтайтын жолға назар аударыңыздар:

This.perimeter = _perimeter;

Мұнда perimeter тәсілі анықталған және бұл тәсілді _perimeter атты функция жүзеге асырады. Тәсіл және функция аттары әр түрлі бола береді. Бірақ түсінбеушілік тудырмас үшін функция атын тәсіл атына төменгі сызықша «_» қою арқылы анықтау ұсынылады.

Объект түсінігі – қиын болмағанымен, оны дұрыс сипаттауға дағдылану керек. Rectangle объектісіне тағы бір мысал келтірейік. JavaScript тіліндегі объект кәдімгі функция сияқты function түйінді сөзімен сипатталады:

// Rectangle объектісі

function Rectangle (a,b)

{ // Қасиеттері.

this.width = a; // Тіктөртбұрыша ені.

this.height = b; // Тіктөртбұрыш биіктігі.

// тәсілдері.

this.square= _square;//Тіктөртбұрыш ауданы

this.perimeter = _perimeter;// Тіктөрбұрыш периметрі

this.radius=_radius;//Сырттай сызылған шеңбер радиусы

}

// объекті тәсілдерін жүзеге асыру.

function _square()

{ return this.width * this.height; }

function _perimeter()

{ return 2 * (this.width + this.height);}

function _radius()

{ var temp = this.width * this.width +

this.height * this.height;

return Math.sqrt(temp)/2; }

// Rectangle құжаттамасының соңы

Сипатталудың келесі түрі:

function Rectangle (a,b)

{

}

объект конструкторы деп аталады, оның ішіндегі айнымалылар this сөзі арқылы жазылады:

this.width = а; //Тіктөртбұрыш ені.
this.height = b; // Тіктөртбұрыш биіктігі.

this түйінді сөзі конструктор арқылы жасалатын объект данасының көрсеткіші болып табылады. Яғни ол айнымалылар мен функцияларға болашақ объект данасының қасиеттері мен тәсілдері ретінде мағына береді. Шартты түрде this түйінді сөзі конструктор сипатталуындағы айнымалыны қасиетке, ал объект тәсіліндегі сілтемені функцияға «айналдырады». Кәдімгі функцияны объект конструкторынан айырудың оңай тәсілі: «егер function {...} ішінде var сөзі орнына this пайдаланылса – ол объект конструкторы болғаны».

var r1 = new Rectangle(3,4);

// Тіктөртбұрыштың бірінші данасы.

var r2 = new Rectangle(10,20);

// Тіктөртбұрыштың екінші данасы.

Браузер осы екі команда және объект «құжаттамасы» арқылы тіктөртбұрыштың екі данасын (rl және r2) құрады. Әрбір дананың өз айнымалылары (width және height) болады. Оларды былай пайдалануға болады:

var х = rl.width; // х мәні 3-ке тең.

var у = r2.height; // у мәні 20-ға тең.

Келесі программаны браузерде тексеріп көрейік:

<НТМL>

<HEAD>

<ТITLE>Объектіні тексеру</ТITLE>

</HEAD>

<BODY bgcolor=white text=black link=blue

alink=red vlink=purple>

<Н1>Объектіні тексеру</Н1> <HR>

<SCRIPT language=JavaScript>

<!--

// -- Rectangle объектісінің құжаттамасы.--

// Объект конструкторы.

function Rectangle(a,b}
{

// Қасиеттері.

this.width = a; // Тіктөртбұрыш ені.

this.height = b; // Тіктөртбұрыш биіктігі.

// тәсілы.

this.square =_square;// Тіктөртбұрыш ауданы

this.perimeter =_perimeter; //Оның периметрі

this.radius = _radius; //Шеңбер радиусы.

}

// Объект тәсілін жүзеге асыру

function _square()

{ return this.width * this.height; }

function _perimeter()

{ return 2*(this.width + this.height); }

function _radius()

{ var temp = this.width*this.width +

this.height*this.height;

return Math.sqrt(temp)/2; }

// Rectangle объектісі құжатының соңы.

// Құрылған объетіміен жұмыс мысалы.

var rl = new Rectangle(3,4);

alert(“1-ші тіктөртбұрыш:\nЕні="+

r1.width+"\nБиіктігі=" + rl.height);

var r2 = new Rectangle(10,20);

alert(“2-ші тіктөртбұрыш:\nЕні="+

r2.width+"\nБиіктігі=" + r2.height);

alert("2-тіктөртбұрыш ауданы="+r2.perimeter());

//-->

</SCRIPT>

</BODY>

</HTML>

Жоғарыдағы келтірілген скрипт жұмысының нәтижелері:

Бақылау сұрақтары:

1. Объект деген не? Түсініктеме беріңіз.

2. Объектінің бір данасы дегенде қалай түсінуге болады?

3. Ағымдағы мерзім мен уақытты қандай объектінің көмегімен шығаруға болады?

4. Жиым деген не? Жиым объектісінің тәсілдеріне сипаттама беріңіз.

5. Объектілі бағытталған программалау деген не?

Тапсырмалар:

1. Сауалнамада бес қызметкердің әрқайсысы үшін келесі мәліметтер толтырылады: тегі, жалақысы, баласының саны. Жанұядағы кісі басына шаққандағы табысты есептеу сценарийін жазыңыз.

2. Сауалнамада алты қызметкердің әрқайсысына келесі мәліметтер толтырылады: тегі, жұмысқа алынған жылы. Жұмыс стажын және стаждары бірдей қызметкерлердің ең үлкен санын анықтау программасын жазыңыз.

3. Сауалнамада алты қызметкердің әрқайсысына келесі мәліметтер толтырылады: тегі, жалақысы. Әрбір қызметкерге келесі принципке сүйене отырып сыйақы тағайындау шешілді: егер оның жалақысы орта жалақыдан аз болса, онда сыйақы оның жалақысының 50 пайызын, басқа жағдайда жалақысының 30 пайызын құрайды. Қызметкердің қолына алатын жалақысын (жалақы мен сыйақы) анықтау сценарийін жазыңыз. Ең көп сыйақы алған қызметкерлердің санын анықтау керек.

4. Бес түрлі тауарды сатып алу жөнінде мәлімет берілген: бір тауардың бағасы, алынған тауардың саны. Тауарды алуға кеткен қаражатты анықтау сценарийін жазыңыз. Бірдей қаражат жұмсалған тауар бар ма, болса, олардың саны қанша?

4.10. Мұралау

Тіктөртбұрыш объектісінің негізінде жаңа объект Kvadrat құрайық. Тіктөртбұрыштың барлық қасиеттері мен тәсілдері мұра ретінде квадратқа өтеді, айырмасы болуы үшін түс элементін қосайық:

// конструктора сипаттамасы (а -қабырғасы, с -түсі)

function Kvadrat(а,с)

{

this.parent = Rectangle;

//Аналық объект.

this.parent(a,a);

//оның конструкторын шақыру.

this.color = с;

// "түсі" қасиетін анықтадық

}

var kv = new

Kvadrat(100,"қызыл"); //Квадрат

var s = kv.square();//ауданы

var p = kv.perimeter();//периметрі

alert("Бұл квадрат " + kv.color + "\nауданы=" + s + "\nА периметрі =" + p + "\nКвадрат қабырғасы=" + kv.width);

Осы сипатталған механизм объектілік бағытталған программалау ортасында мұралау (наследование) деп аталады.

Статикалық және динамикалық мұралау

Мынадай объект құрайық:

//-- Объект Num --

function Num(a)

{ this.number = a; this.mul2 = _mul2; }

function _mul2()

{ return this.number * 2; }

//-- Num объектісі құжаттамасының соңы. --

Объект санды сақтап, оны 2-ге көбейте алады.

Енді былай жазамыз:

var x = new Num(10);

var у = x.mul2();

alert("Объектіні тексеру

Num: 10*2="+y);

Енді Num объектісі үшін мұрагер жасаймыз:

// Num объектісі (Num объектісінен мұраланған)

function Numa(a)

{ this.parent = Num; // Num анасы болып хабарланған

this.parent(a); // анасы конструкторы шақырылған

this.put = _put;// мұрагерінің жаңа тәсілі хабарланған }

function _put()

{ alert("Бастапқы сан=" + this.number);}

// Num объектісі құжаттамасының соңы.

Мұрагерді тексеру үшін былай жазамыз:

// Numа тексеру

var z = new Numa(100);

z.put();

Экранда мынадай жазу пайда болады:

«Бастапқы мән=100»

Num объектісіне жаңа тәсіл қосып былай жазамыз:

Num.prototype.mul3 = _mul3;

function _mul3()

{ return this.number*3;}

Тексереміз:

var t = new Num(10);

alert ("Анасы үшін: 10*3=" +t.mul3());

Мұрагердің өз тегінің жаңа тәсілін қалай түсінетінін тексерейік, ол үшін былай жазайық:
var k = new Numa(10);

alert(k.mul3());

Браузер қате жайлы хабарлама береді. Мұндай мұралау статикалық деп аталады. Мұрагер жасау кезінде оның ішкі құрамына тегінің барлық қасиеттері мен тәсілдері көшіріледі де, содан кейін туыстық байланыс жойылады. Егер оның ата тегі жаңа тәсілге ие болатын болса, оның мұрагері ол туралы ешнәрсе білмейді. Мұрагер жасау кезінде оның ата тегімен байланысын үзбеуге болады. Ол динамикалық мұралау арқылы іске асырылады. Егер объект мұралау тәсілімен жасалса, онда ата тегінің құжаттамасы көшірілмейді, тек оған сілтеме жасалады. Егер ата тегінде бір өзгеріс болса, онда ол барлық «динамикалық» түрде құрылған мұрагерлерге қатысты болып саналады.

Динамикалық мұралауы бар объектіге мысал:

//Объект Numa (Num-нан динамикалық мұраланған)

function Numa(a)

{ this.parent = Num;

// Num анасы болып хабарланған

this.parent(a);

// анасы конструкторы шақырылған

this.put = _put;

// мұрагердің жаңа тәсілі хабарланған

}

Numa.prototype = new Num;

//анасымен динамикалық байланыс берілген

function _put()

{

alert("Бастапқы мән="+this.number);

}

//-- Numа объектісі құжаттамасының соңы.--

Array объектісінің sort тәсілі

Жиым элементтерін сұрыптау әрекеттерін орындауға болады. Array объектісінің sort тәсілін қарастырайық. Ол үшін sort(function) немесе sort() тәсілі енгізілген, мұнда function параметрі екі элементті салыстыру ережесін береді, ол болмаған жағдайда сұрыптау лексографикалық тәртіпте жүргізіледі. Мысалы:

var set = new

Array("zebra","ant","dog","cat"); set.sort(); alert(set);

Бұл жиым элементтерін алфавит бойынша сұрыптау әрекетін орындайды.

Бұл sort(function) тәсілінде function функциясының екі аргументі болуы тиіс, ол мынадай мәндер қайтарады:

– теріс сан, реттелуі бойынша бірінші аргумент екіншісінен сол жақта орналасқанда;

– 0, аргументтері тең мәнді болғанда;

– оң сан, реттелуі бойынша бірінші аргумент екіншісінен оң жақта орналасқанда. Мысалы:

var set = new Array(26,71,9,1);

function Compare(a,b)

{ return а - b; }

set.sort(Compare);

alert(set);

Array құрамдас объектісі және оның тәсілдері

1. Тәсіл түрі – concat(array). Бұрынғы жиымға array жиымы қосылған жаңа жиым құрады. Бастапқы жиым өзгермейді.

Мысал:

var set1 = new Array(1,2);

var set2 = new Array(3,4);

var set = set1.concat(set2);

alert(set1+”\n”+set2+”\n”+set);

2. Тәсіл түрі – join (ажыратқыш). Ажырату символы арқылы бөлініп орналасқан массив элементтері жолын береді. Бастапқы массив өзгермейді.

Мысал:

var set= new Array(1,2,3,4,5);

var set2 = set.join(“+”);

alert(set1+”\n”+set2);

3. Тәсіл түрі – reverse(). Жиым элементтерін оның 1-элементі соңғысы болатындай етіп кері бағытта орындарын ауыстырып береді.

var set= new Array(1,2,3,4,5);

alert(“бастапқы жиым:”+set);

var y = set.reverse();

alert(” жаңа жиым:”+y);

4. Тәсіл түрі slice(ind1) емес– slice(ind1,ind2) Бастапқы жиымнан ind1-ден бастап ind2-1 позициясына дейінгі элементтерден тұратын жаңа жиым құрады. Егер 2-индекс жоқ болса, онда жиымның соңына дейінгі элементтер алынады.

var set= new Array(0,1,2,3);

var set1= set.slice(1,3);

var set2= set.slice(1);

alert(”set=“+set+”\nset1=”+

set1+”\nset2=”+set2);

5. Тәсіл түрі sort() емес – sort(function). Жиымды сұрыптау мүмкіндігін береді. function параметрі екі элементті салыстыру ережесін береді, ол жоқ болса, сұрыптау лексографикалық тәртіппен жүргізіледі. Мысалы:

var set = new Array("zebra","ant","dog","cat"); set.sort(); alert(set);

sort(function) тәсілінде function функциясының екі аргументі болуы тиіс, оның қайтаратын мәндері:

теріс сан, реттелуі бойынша бірінші аргумент екіншісінен сол жақта орналасқанда;

— 0, аргументтері тең мәнді болғанда;

— оң сан, реттелуі бойынша бірінші аргумент екіншісінен оң жақта орналасқанда. Мысалы:

var set = new Array(26,71,9,1);

function Compare(a,b)

{ return a-b; }

set.sort(Compare);

alert(set);

6. length тәсілі – массив ұзындығын (оның элементтері саны) анықтайды. Мысалы:

var set = new Array(0,1,2,3,4,5,6,7,8,9,10); alert(set.length);

Бақылау сұрақтары:

1. Мұралау дегенді қалай түсінуге болады? JavaScript тілінде ол қалай жүзеге асады? Мысалдар келтіріңіз.

2. sort(function), concat(array), join тәсілдеріне сипаттама беріңіз.

3. reverse(), slice(ind1,ind2) тәсілдері қандай қызмет атқарады.

4. sort(function), length тәсілдеріне сипаттама беріңіз.

Тапсырмалар:

1. Қазақстан облыс орталықтарының алфавит бойынша реттеңіз.

2. 15-ке дейінгі жұп сандарды өсу реті бойынша шығарыңыз.

3. 20 дейінгі сандардан тұратын жиымның ұзындығын анықтау сценарийін құрыңыз.

4. 4,5,6,7 және 7,8,9 жиымдардан slice(ind1,ind2) тәсілінің көмегімен жаңа жиым құру сценарийін жазыңыз.

4.11 Браузер объектілері мен оқиғалары

Құжаттың объектілік моделі

Браузер экранын өзгерту немесе жаңа терезелер жасау үшін браузердің ішкі мүмкіндіктерімен танысып, оның ішкі объектілерін пайдалану керек. Браузер тәгтерді экранда көрсетіп қана қоймай, ол құжаттың иерархиялық моделіне сәйкес объектілер тұрғызады. Браузер жұмыс кезінде модельді тұрақты түрде бақылап отырады. Егер объект қасиеті өзгерсе, экрандағы бейне де өзгереді. JavaScript тілі арқылы объект қасиеттерін өзгертуге болады, сондықтан ол экран динамикасын жүзеге асыра алады.

Кез келген құжаттың объектілік моделі әрқашанда нақты сайттың бейнесінен тәуелсіз түрдегі бір құрылымда болады (4.22-сурет).

4.22-сурет. Объектілер құрылымы

Схемада көрсетілген барлық «объектілер» негізінде бір объектінің даналары болып табылады. Браузер әр нақты құжат үшін сол даналарды жеке-жеке түрде құрастыра алады. Сол даналарды бұдан кейін «объектілер» деп атаймыз.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: