ҚАЗАҚСТАН РЕСПУБЛИКАСЫ БІЛІМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛІГІ
СЕМЕЙ ҚАЛАСЫНЫҢ ШӘКӘРІМ АТЫНДАҒЫ МЕМЛЕКЕТТІК УНИВЕРСИТЕТІ
|
3 деңгейлі СМК құжаты
|
ПОӘК
|
ПОӘК 042-18-12.1.1/03-2013
|
«Java-технологиясы» пәнінен оқу-әдістемелік материалдар
|
Баспа №1 18.09.2013ж
|
«Java-технологиясы»
пәнінен оқу-әдістемелік кешен
5В060200– «Информатика» мамандығына арналған
ОҚУ-ӘДІСТЕМЕЛІК МАТЕРИАЛДАР
Семей
2016
мазмұны
1. Глоссарий
2. Дәрістер
3. Практикалық және зертханалық сабақтар
4. Студенттің өздік жұмысы
1. глоссарий
Бұл ОӘМ-да келесі терминдер және оларға түсініктемелер қолданылған:
Веб-технологиялар – Интернет желісін қолданып пайдаланушылармен бірге жұмыс істеуді ұйымдастыру есептерін шешудің техникалық, коммуникациялық, программалық әдістер кешені.
Контент – веб-беттерде орналастырылған ақпараттар.
URI беттер– Интернет желісіндегі беттің уникалды адресі.
Интернет сөзі Interconnected networks (байланысқан жүйелер) терминінен шыққан, яғни техникалық көзқараспен – бұл кіші және ірі желілер бірлестіктері.
ҒТР-сервер деп FТР арқылы қызмет ететін арнаулы программасы бар желіге қосылған компьютер аталады
Әдістеме –мәселелерді шешу әдістерінің жиынтығы.
Принцип – бұл ереже. Принциптер жиі шексіздіктер мен талаптар түрінде көрсетіледі.
Апплет- бұл арнайы түрдегі тақта, қосымша әдістері мен қасиеттері бар компоненттерді орналастыруға арналған контейнер.
2. Дәрістер
Дәріс сабағының құрылымы:
Дәріс №1. Java тіліне кіріспе
Java программалау тілі бұған дейінгі бір де бір программалау тіліне ұқсамайды. Ол компьютердегі WWW браузерлер ортасындағы жұмысты жеңілдету үшін өңделген. Java тілінің негізгі жетістіктерінің бірі болып, тек қана статикалық мәтіндермен және графикамен ғана емес, сондай-ақ әртүрлі динамикалық объектілермен де ұмыс істеуі болып табылды. Java
Тілінде программалаудың ең маңызды ерекшелігі қолданушы компьютерінің типіне тәуелді еместігі. Java аплеттері үшін бұл маңызды емес, олар Java-ны қолданушы браузер орнатлғн кез келген компьютерде іске қосылу мүмкіндігі бар бас түйінде сақталады. Java үшін өңдедің кейбір интегралданған орталарының ерекшеліктерінің бірі болып, программалау тілінің өзі сияқты, платформаға тәуелді жұмыс істей беруге болады. Java объектілі-бағытталған программалау тілі. Бұл дегеніміз мұнда жазылған программа өзара байланысты объектілерден тұрады дегенін білдіреді.
Java тілінде жазылған программа бірден қандай да бір нақты процессор командаларына тәуелді емес. Java виртуалды машинасының командалары деп аталатын машналық командаларға жинақталады. Java виртуалды машинасы дешеніміз – бұл жүйемен бірге командалардың орындалу кодтарының жиынтығы. Бірінші сатыда Java тілінде жазылған программа компилятор арқылы байт кодтарға аударылдады. Бұл компиляция нәтижесінде алынған байт кодтарды JVM-ді іске асыратын жүйесі бар кез келген компьютерде орндаға болады. Бұл кезде процессор типі, декомпьютер архитектурасы маңызды емес.
Қарапайым программа мысалы:
Экранға мынадай хабарлама шығару: «Java программалау тілін үйренеміз»
Class Hello World {
Public static void main(String[] args){
System.out.println (“Java программалау тілін үйренеміз”);
}
}
1. Барлық программа бір немесе бірнеше класстардан тұрады, берілген қарапайым мысалда тек бір ғана класс бар.
2. Класстың басы class қызмеьші сөзімен белгіленеді, одан кейін кластың аты беріледі, ол еркін түрде таңдалады, берілген жағдайда HelloWorld. Кластың құрамы түгелдей ирек жақша ішіне жазылады және кластың денесін құрайды.
3. Барлық әрекеттер ақпараттарды өңдеу әдістерінің көмегімен орындалады, қысқаша жай әдіс деп атайды. Әдістер аттарымен ерекшеленеді. Әдістердің біреуі міндетті түрде main деп аталуы тиіс, программаның орындалуы осыдан басталады.
4. Әдіс нәтижесінде әрқашанда бір ғана мән береді, оның типі міндетті түрде әдіс атының алдында көрсетіледі. Сондай-ақ әдіс біздің жағдайдағыдай процедура рөлін атқарып ешқандай мән қайтармауы мүмкін. Сонда қайтарылатын мән типінің орнына void сөзі жазылады.
5. Әдіс атынан кейін жақшада, үтір арқылы аргументтер немесе әдіс параметрлнрі тізбектеліп жазылады. Әр аргумент үшін оның типі көрсетіледі де бос орын арқылы аты жазылады.
6. Әдіспен қайтарылатын мәннің типі алдында модификаторлар жазылуы мүмкін. Public сөзі бұл әдісті кез келген жерден қолдана беруге болатынын білдіреді. Static сөзі main () әдісін программаның ең бастапқы орындалуы кезінде шақыруға мүмкіндік береді. Модификаторлар жалпы міндетті емес, бірақ main () әдісі оларға қажет. Берілген аттың жәй айнымалының емес, әдіс аты екендігінін ерекшелеп көрсету үшін әдіс атынан кейін жақша қойылады.
7. Әдіс денесі, оның барлық құрамы ирек жақшаға алынып жазылады. Мысалда main() әдісінің орындайтын жалғыз әрекеті System.out.println күрделі аты бар басқа әдісті шақырумен және оған өңдеу үшін бір аргументті, «Java программалау тілін үйренеміз» мәтіндік тұрақтыны берумен шектеледі. Мәтіндік тұрақтылар тек қана шектеушілер болып табылатын және мәтін құрамына кірмейтін тырнақшаларға алынып жазылады.
System.out.println құрама аты Java API-ға кіретін System класында println () әдісі бар PrintStream класының Java API кластарының бір данасынан тұратын, out атты айнымалысымен анықталатынын білдіреді. Println() әдісінің әрекеті әдетте мәтіндік терминалды экранға шығарумен байланысты өзінің аргументін шығатын ағынға шақырумен шектеледі. Java тілі кіші және үлкен әріптерді айырады, main, Main аттары Java компиляторының көзқарасы бойынша әртүрлі. Мысалдарда string, system міндетті түрде бас әріппен жазылуы керек, ал main кіші әріппен жазылады.
Біздің мысалда программаны ағымдағы каталогта world. Javaатты файлда сақтау қажет. Содан соң файлдың атын аргумент түрінде бере отырып, компилятор шақырлады.
Javac Hello world. Java
Компилятор байт-кодпен файл құрып оған Helloworld.class атын береді де, осы файлды ағымдағы каталогқа жазады. Одан кейін аргумент ретінде класс атын беріп интерпретаторды шақыру керек. Java Hello World
Экранда пайда болады:
Java тілінде программалауды үйренеміз
Дәріс №2. Типтер
Java тілінде әртүрлі типтегі тұрақтыларды әр түрде жазуға болады:
Нақты тұрақтылар тек қана ондық санау жүйесінде екі түрде жазылады:
Бекітілген нүктемен: 37,25, -128.678967,+27.035
Жылжымалы нүктемен: 2,5е34, -0.345е-25, 37.02Е+4. Е латын әрпін бас әріппен немесе кішкене әріппен жазуға болады, бос орын мен жақша қолданылмайды.
Нақты тұрақтының соңында F немесе f әрпін қоюға болады, онда тұрақты float типті форматта сақталады: 3,5f, -45.67F, 4.7e-5f. D әрпін жазуға да болады: 0.045D, -456.77889d бұл double типін білдіреді, бірақ бұл артық болады, өйткені нақты тұрақтылардың өзі де double типті форматта сақталады.
Жеке белгілерді жазу үшін келесі формалар қолданылады: Баспа белгілерді апострофта жазуға болады: ‘a’, ‘N’,?.
Басқарушы белгілер апострофта кері еңкейтілген сызықпен жазылады:‘\n’-ASCI 10 кодымен newline жолын аудару белгісі.
‘r’ - 13 кодымен CR арбаны қайтару белгісі, ‘f’ - 12 кодымен FF парағын аудару белгісі.
‘\b’ - бір қадамға қайтару белгісі BS, 8 кодымен ‘\t’- көлденең табуляция белгісі HT, 9 кодымен ‘\‘\’ – кері еңкейтілген сызық
‘\’’’ - тырнақша
‘\’’ – апостроф.
Кез келген 0 ден 255 дейінгі ондық кодировкасы бар белгінің кодын, сегіздік санау жүйесінде 3 цифрдан асырмай кері еңкейген сызықтан кейін апостроф ішінде жазуға болады: ‘\123’ – S әрпі, ‘\346’ - Ж әрпі CP1251 кодировкасында. Баспа және басқарушы белгілер үшін бұл форма қолданылмайды, өйткені алдыңғы пунктте көрсетілгендей компилятор бірден сегіздік санау жүйесіндегі жазбаны жоғарыда жазылғандай аударады. Ең үлкен код ‘/377’ – ондық сан 255. Unicode кодировкасындағы кез келген символдың коды латынның u әрпімен төрт орынды цифрмен: ‘\u0053’ – S әрпі, ‘\u0416’ – Ж әрпі және кері еңкейтілген сызықтан кейін апострофта жазылады. Символдар char типті форматта сақталады.
Символдар қатары тырнақшаға алынады. Басқарушы символдар мен кодтар да дәл солай кері еңкейген сызықпен, жолддарға жазылады. Жолдар бастапқы кодтың бір қатарында орналасуы мүмкін, ашылған тырнақшаны бір қатарға жабылатын тырнақшаны келесі қатарға жазуға болмайды. Жолдық тұрақтылар үшін плюспен белгіленетін жалғасу операциялары анықталған. Жалғасу + қатар нәтижесінде Жалғасу қатарын береді.
Ұзын қатарды бір қатарлы тұрақтылар түрінде жазу үшін, жабу тырнақшасынан кейін бірінші және келесі жолдарға қосу қою керек, сонда компилятор екі қатарды бір қатарлы тұрақтыға жинайды, мысалы:
“Бір қатарлы тұрақты жазылған” + бастапқы мәтіннің екі қатарында.
Java тілінде құрылған, бастапқы мәліметтердің барлық типтері, екі топқа бөлінеді: примитивті типтер және сілтемелі типтер. Сілтемелі типтер массивтерге, кластарға және интерфейстер болып бөлінеді. Примитивті типтер барлығы 8. Оларды логикалық тип Boolean және сандық деп бөлуге болады.
Сандық типтерге бүтін: byte, short, int, long, char жатады. Бүтін типтерге қолданылатын операциялар:
Қосу +()
Азайту –
Кобейту*
Бөлу/
Бөлгеннен қалған қалдықты алу ٪
Инкремент ++
Декремент –
Нақты типтер Java-да екеу: float және double. Стандартты арифметикалық және тригонометриялық функцияларды орындау Java тілінде арнайы Math класының көмегімен жүзеге асырылады. Ол әр программа автоматты түрде берілетін Java. Lang пакетіне жатады. Math класының кейбір әдісін келтіреміз:
Final double PI
Double pow (double, double)
Double sqrtr(double)
Double atan (double)
Double cos|sin|tan (double)//
Double random()
Int round(float)
Long round (double)
Value abs (value)
Value max (value, value)
Value min (value, value)
Дәріс №3. Операторлар
Java тіліндегі негізгі операторлар жинағы: айнымалы және басқа да объектілердісипаттау операторлары, өрнектеу операторлары, меншіктеу операторлары, If шартты операторы do-while for үш циклдік switch нұсқаулыоператоры; break, continue және return өтуоператорлары; {}-блогы; босоператор – жәйнүктеліүтір.
Мұнда Java операторларжинағытолықкелтірілмеген, ол тілді оқып-үйрену барысында толықтырылады. Java тілінде goto операторы болмайды. Кез келген оператор нүктелі үтірмен аяқталады.
Меншіктеу операциясы теңдік белгісімен(=)белгіленеді,оның сол жағында айнымалытұрса, оң жағында айнымалының типімен бірігетін өрнек тұрады:
х = 3.5, у = 2 * (х - 0.567) / (х + 2), b = х < у, bb = х >= у && b.
Блокта тіл ережесі бойынша тек бір ғана оператор жазылатын орындарда, ноль немесе бірнеше операторлар енгізе алады. Мысалы, {х = 5; у = ?;}. Бос блок жазуға да болады, ол үшін қос өрнекті жақша {} аламыз.
Операторлар блогі айнымалылар әрекеттерінің шектелу облысы үшін және программа мәтінінің оқылуын жақсарту үшін қолданылады.
Шартты оператор (if-then-else statement) Java тілінде келесі түрде жазылады: if (логӨрнек) then оператор1 else оператор2 және келесі түрде орындалады .Алдымен логикалық өрнек(логӨрнек) есептеледі. Егер шешімі true болса, онда оператор 1 орындалады және осымен шартты оператор жұмысын тоқтатады, оператор2 әрекет етпейді, ары қарай if операторынан кейінгі оператор орындалады. Егер шешімі false болса, онда оператор 2 орындалып, оператор1 мүлдем орындалмайды. Шартты оператор қысқаша if(логӨрн ек) болады және false жағдайында ешқандай жұмыс атқарылмайды. Тіл синтаксисі then және else бұтақтарына бірнеше оператор жазуға тиым салады. Қажет жағдайда ирек жақшалардағы блок операторлары құрылады. Шартты операция үш операндадан тұрады.Алдымен, нәтижесінде true немесе false мәндерін қабылдайтын еркін логикалық өрнек жазылады, содан кейін сұрақ белгісі қойылады, содан соң қос нүктемен ажыратылған екі еркін өрнек келтіріледі, мысалы,
Мысал.Квадратты теңдеудің түбірлерін табуclass Kwur1 {
public static voidmain(String[]args){ double a=1,b=2,c=3,d,d1,a1; d=b*b-4*a*c;
if (d<0){d1=0.5*Math.sqrt(-d)/a; a1=-0.5*b/a;
System.out.println("x1="+a1+"+i"+d1+", x2="+a1+"i"+d1);}else {
d=0.5*Math.sqrt(d)/a; a=-0.5*b/a;
System.out.println("x1="+(a+d)+",x2="+(a-d));
}
}
}
Дәріс №4. Программаның орындалуын басқару
Циклдің негізгі операторы – while операторы келесі түрде болады: while (логӨрнек) оператор. Алдымен, логӨрнек логикалық өрнегі есептелінеді; егер оның мәніtrue болса, онда циклді құрайтын оператор орындалады.Одан кейін қайтаданлогӨрнек есептеледі және опеаратор әрекет етеді, яғни ол false мәні шыққанша орындалады. Егер логӨрнек басында false-қа тең болса, онда оператор бір рет те орындалмайды. Алдын ала тексеру циклдің орындалуының қауіпсіздігін қамтамасыз етеді, толып кетуден, нольге бөлуден және басқа да қолайсыздықтардан сақтайды. Сондықтан while операторы негізгі болып табылады, ал кейбір тілдерде ол тіптен жалғыз циклдік оператор болып табылады.
Циклдегі оператор бос болуы мүмкін, мысалы, келесі код бөлігі: int i = 0;
double s = 0.0;
while ((s += 1.0 / ++i) < 10);
s гармоникалық қосындысы 10 мәніне жететіндей і көбейтіндінің санын есептейді. Шексіз цикл ұйымдастыруға да болады:
while (true) оператор
Егер циклге бірнеше оператор жазу керек болса,онда операторлар блогін {} қолдануға болады. Циклдің екінші операторы - do-while операторы келесі түрде болады: do оператор while (логӨрн). Мұнда ең алдыменоператор орындалып,содан кейін логикалық өрнеклогӨрн есептеледі. Цикл логӨрн true-ге тең болғанға дейін орындалады.
Сontinue операторы тек цикл операторларында қолданылады. Ол екі түрге ие. Бірінші түрі тек қана continue сөзінен тұрады және жедел түрде келесі цикл итерациясына өтуді жүзеге асырады. Код үзіндісінде continue операторы нольге бөлуден сақтандырады:
for (int i = 0; i < N; i++){ if (i '== j) continue;
s += 1.0 / (i - j);
}
Вreak операторы цикл операторларында және осы конструкциялардан жылдамшығу үшін нұсқа операторында қолданылады. Нұсқа операторы switch бірнеше бағыт бойынша тармақталуды қамтамасыз етеді. Әр тармақ тұрақтымен немесе қандай да бір бүтін типтің(long типінен басқа) тұрақтылық өрнегімен белгіленеді және таңдалады. Барлық конструкция мына түрде болады:
switch (БүтінӨрн){
case констӨрн1: оператор1 case констӨрн2: оператор2
. . . . .
case констӨрнN: операторN default: операторDef
}
Жақшаға алынған констөрнек өрнегі byte, short, int, char типтерін қабылдайды, бірақ long типті бола алмайды.
Мысал1. Қандай да бір жаңа тіл ортасында бағдарлама құрып үйренудің әдеттегідей «Hello, World!» жазуын экранға шығару.
Public class Hello {
Public static void main(String[] args) {
System.out.print(“Hello,World!”);
}
}
Public class Echo {
Public static void main ( String[] args) {
Int i=0;
While(iSystem.out.print(args[i]+””);
I++;
}
System.out.println();
}
}
Дәріс №5. Класстар
Обьектілі-бағытталған программалау тілдеріндегі негізгі ұғым – класс ұғымы.
Java программалау тілінде класс class қызметші сөзінің кәмегімен анықталады және класс аты, қолданылатын айнымалылар және әдістер көрсетіледі.
Обьектілік айнымалылар дегеніміз – обьект типті айнымалылар. Java программалау тілінде обьектілік айнымалылар дегеніміз – обьектіге сілтеме. Обьектілік айнымалыны нақты обьектімен байланыстыру меншіктеу арқылы жҥзеге асырылады. Обьектіні құру «конструктор» деп аталатын арнайы ішкі программаны шақыру арқылы жҥзеге асырылады. Конструктор құрылған обьектіге сілтемені қайтарады. Конструктор аты экземпляры құрылатын класс атымен сәйкес келеді. Конструкторды шақыру кезінде оның алдында new қызметші сөзі қолданылады.
Мысалы:
Circle obj1=new Circle();
Әдістер обьект әдістері және класс әдістері болып екіге бөлінеді. Обьект әдістерін тек обьектілердің өзінен шақыруға болады. Ал класс әдістерін кластардан да, обьектілерден де шақыруға болады.
Әдістерді шақыру форматы:
Класс аты.Әдіс аты(параметрлер тізімі)
немесе
Обьект аты.Әдіс аты(параметрлер тізімі)
Әдістер обьектілерде сақталмайды, бірақ обьектілер оларды шақыра алады.
Java технологиясының идеологиясы компьютерлік желі жұмысына негізделген және қажет болған жағдайда программаға қажетті кластар мен ресурстарды жҥктей алады. Яғни, бір қосымшада кӛптеген кластар жиынтығы қолданылуы мҥмкін. Java программалау тілінде класстарды топтастыру ҥшін арнайы пакеттер (package) қолданылады. Проект құру кезінде кластар автоматты тҥрде пакеттерде орналасады. Java программалау тілінің мҥмкіндіктері ӛте кӛп. Қысқаша айтқанда, Java – жаңа ғасырдың программалау технологиясы деп қорытындылауға болады.
Дәріс №6. Пакеттер мен интерфейстер
Java API стандартты кітапханасына жүздеген кластар жатады. Java-ны өңдеушілер тілге қосымша конструкция – пакеттер енгізді. Java-ның барлық кластары пакеттерге бөлінеді. Пакеттер кластардан басқа интерфейстер мен енгізілген ішкі пакеттергебөлінеді. Осылайша пакеттер мен ішкі пакеттердің ағаш тәрізді құрылымы пайда болады.
Бұл құрылым нақты файлдық жүйе құрылымында бейнеленеді.Сlass (байт-кодтарынан тұратын) кеңейтілуімен берілген, пакетті құрайтын барлық файлдар файлдық жүйенің бір каталогында сақталады. Ішкі пакеттер осы каталогтың ішкі каталогтарында жинақталған.
Әр пакет бір аттар кеңістігін құрайды. Бұл – барлық кластардың, интерфейстер мен ішкі пакеттердің аттары пакетте бірегей болады дегенді білдіреді.Әртүрлі пакеттегі аттар бір-бірімен сәйкес келуі мүмкін, бірақ бұлар әртүрлі программалық өлшемдер болады. Осындай жағдайда ешқандай класс, интерфейс немесе ішкі пакет бірден екі пакетте бола алмайды. Егер әртүрлі пакеттердегі аттары бірдей екі класты қолдану қажет болса,онда класс аты пакет атымен анықталады: пакет.класс. Мұндай анықталған ат кластың толық аты деп аталады.
Барлық осы ережелер файлдар сақтау ережелері мен каталогтағы ішкі каталогтарменсай келеді.
Пакеттерді сонымен қатар private, protected және public, қатынаудың «пакеттік» деңгейі класс мүшелерінде бар қатынау құқығын қосу үшін қолданады.
Егер класс мүшесіprivate, protected, public модификаторларының ешқайсысымен белгіленбесе, онда шартты жағдайда оғанпакеттік қатынау жүзеге асырылады, нақтырақ айтқанда, ондай мүшеге сол пакеттегі кез келген кластың кез келген әдісі қатынай алады. Пакеттер класқа қатынауды толық шектей алады— егер класс public модификатормен белгіленбесе, онда барлық оның мүшелері,тіпті ашық, public те, басқа пакеттерден көрінбейді.
Пакет құру үшін Java-файлдың бірінші жолында бастапқы кодпенpackage жолының атын жазу керек, мысалы:
package mypack;
Сонымен қатар mypack көрсетілген атымен пакет құрылады және бұл файлда жазылған барлық кластар mypack пакетіне түседі. Осы жолды әр бастапқы файлдың басында қайталай отырып, пакетке жаңа кластарды енгізуге болады.
Ішкі пакеттің аты пакет атымен анықталады. Аты бар ішкі пакет құру үшін, мысалы, subpack, бастапқы файлдың бірінші жолында мынаны жазу қажет:
package mypack.subpack; және осы файлдың барлық кластары мен осындай бірінші жолдары бар барлық файлдарmy-pack пакетінің subpack ішкі пакетіне түседі.
Рackage жолы аты болғандықтан; ол біреу және ол міндетті түрде файлдың бірінші жолы, әр класс бір пакетке немесе ішкі пакетке түседі.
Java компиляторы өзі mypack аты бар каталог, оның ішінде subpack ішкі пакетін құра алады, және оларда байт-кодтары бар class-файлдарды орналастыра алады.
А, в кластарының толық аттары мына түрде болады: mypack.A, mypack.subpack.в.
Пакет аттарын кіші әріптермен жазу ұсынылады,сонда олар класс аттарымен сәйкес келмейді, себебі олар үлкен жазба әріптерінен басталады.
Java API кластарының кітапханасы java, javax, org.omg пакеттерінде сақталады. Java пакеті applet, awt, beans, io, lang, math, net, rmi, security, sql, text, util ішкі пакеттерінен тұрады және бірде-бір класс болмайды. Бұл пакеттердің өз ішкі пакеттері болады,мысалы, ГИП-ті құру пакеті және java.awt графиктері сolor, datatransfer, dnd, event, font, geometry, im,image, print ішкі пакеттерінен тұрады. Пакет құрамы болжамнан болжамға ауысып отырады. Кластардың біреуі өз сипаттамасында public модификаторымен белгіленуі керек.
Тәуелсіз кластан ашық, public, басқа пакеттің класс өрістеріне қатынауға болады.Ішкі кластан қорғалған, protected өрістеріне қатынауға болады, бірақ суперкласс көшірмесі емес, сәйкесінше мұраға қалдырылған болуы керек.
Барлық көрсетілгендер өрістерге ғана емес, әдістерге де қатысты. 1-кестеде кластың өрістері мен әдістеріне қатынау құқықтары көрсетілген:
|
|
|
|
1-кесте
|
|
|
|
|
|
|
Класс
|
Пакет
|
Пакеттер мен ішкі
|
Барлық кластар
|
|
|
|
кластар
|
|
private
|
+
|
|
|
|
"package"
|
+
|
+
|
|
|
protected
|
|
+
|
+
|
*
|
public
|
+
|
+
|
+
|
+
|
Protected-өрістері мен әдістеріне бөтен пакеттен қатынау ерекшелігі жұлдызшамен бегіленген. Пакеттерді файлдар бойынша орналастыру
Кластардың байт-кодтарынан тұратынlass-сфайлдар сәйкес каталогтар бойынша орналасуы қажет. Осыған байланысты мысал қарастырайық. Айталық, D:\jdkl.3\MyProgs\ch3 каталогында бос classes ішкі каталогы және екі файл — Base.java және Inp2.java болсын делік. Base.java файлында Base класын кеңейтетін үш класс: Inpl, Base және Derivedpl сипатталған. Бұл кластар р1 пакетінде орналасқан. Inp2.java файлында екі класс сипатталған: Base класын кеңейтетін Inp2 және Derivedp2 кластары. Бұл кластар басқа 2р пакетінде орналасқан. Барлық жұмысты қолмен де жасауға болады:
Сlasses каталогында р1 және р2 ішкі каталогтар құру.
Base.java файлын р1 каталогына орналастырып, р1-ді ағымдағы каталог жасау.
P1 каталогында үш файлды: Base.class, Inpl.class, Derivedpl.class ала отырып, Base.java компиляциялаймыз.
Inp2.java файлын р2 каталогына орналастырамыз.
Қайтадан classes каталогын ағымдағы каталог жасаймыз.
Екінші файлды компиляция жасаймыз, ол үшін мына жолды көрсетеміз: p2\Inp2.java.
java p2.inp2 программасын жүктейміз.
2 және 3-ші қадамдардың орнына кез-келген жерде үш class-файл құруға болады, ал содан
2 және 3-ші қадамдардың орнына кез – келген жерде үш class – файл құруға болады, ал содан кейін оларды рі каталогына көшіруге болады. Class – файлдарда файлдар жолы туралы ешқандай ақпарат сақталмайды. 5 және 6 әрекеттердің мәні: Inp2. Java файлының компиляциясы кезінде компилятор р1. Base класын білуі керек, ал осы класпен файлды ағымдағы каталогтан бастап р1. Base. Class жолы бойынша іздейді.
Соңғы 7-ші іс-әрекетте кластың толық атын көрсету керектігіне көңіл аудару керек.
Егер компилятордың командалық жолының кілттерін(options) қолданатын болсақ, онда барлық жұмысты жылдам орындауға болады.
1. javac -d classes Base.java пакеті үшін параметрмен бастапқы каталогтың жолын көрсете , отырып-dкілті бар компиляторды шақырамыз:
Компилятор classes каталогында р1 ішкі каталогын құрады және онда үшclass-файлын орналастырады.
2. Сlasses каталогының жолын параметрмен көрсете отырып, classpath жол-тағы бір кілтімен компиляторды шақырамыз, мұнда компиляциядан өткен pi пакеті бар ішкі каталог орналасқан:
javac -classpath classes -d classes Inp2.java
Компилятор, -d кілтінбасқараотырып, classes каталогындар2 ішкікаталогынқұрадыжəнеондаекі class-файлорналастырады, онықұрубарысындаолclasspath кілтінбасқараотырып, p1 каталогына "көрініп" отырады.
Сlasses каталогын ағымдық жасаймыз.
java p2.inp2 программасын жібереміз.
Кластар мен пакеттерді импорттау үшінimport операторы қолданылады. Import операторын қолдану ережелері: import сөзі жазылады және бос орын арқылы нүктелі үтірмен аяқталатын кластың толық аты жазылады.Қанша класс көрсету керек болса,сонша import операторы жазылады. Немесе import операторының екінші формасы қолданылады – пакеттің немесе ішкі пакеттің аты көрсетіледі,ал кластың қысқа атының орнына жұлдызша* қойылады. Бұл жазбамен компиляторға бүкіл пакетті қарастыру қажет болады. Біздің мысалда
import р1.*;
деп жазуға болар еді.
Тек public модификаторымен белгіленген ашық кластарды ғана импорттауға болады. Java.lang пакеті әрқашан қарастырылып отырады, оны импорттау міндетті емес.
Стандартты кітапхананың қалған пакеттерінimport операторларынlа көрсету керек болмаса кластардың толық аттарын жазу керек.
Java тілінде программа мәтіні бар бастапқы файлдың құрылымын қарастырайық:
Файлдың бірінші жолында міндетті емес package операторы болуы мүмкін.
Кейінгі жолдарда міндетті емес import операторы болуы мүмкін.
Ары қарай кластар мен интерфейстердің сипатталуы кетеді. Тағы екі ереже:
Файл кластарының арасында тек жалғыз ашық public-класс болуы мүмкін.
Файл аты ашық класс атымен сай келуі керек, егер соңғысы бар болса.
Бұдан шығатыны, егер жобада бірнеше ашық кластар болса,олар әр түрлі файлдарда орналасуы керек. Ашық класс ұсынылады, егер ол файлда бар болса, бірінші сипаттау керек.
Интерфейстің (interface)кластан ерекшелігі,ол тек тұрақтылардан және әдістертақырыптарынан (олардың жүзеге асырылуынсыз) тұрады.
Интерфейстер кластардағыдай пакеттер мен ішкі пакеттерде орналасады жәнеclass-файлдарда компиляцияланады.
Интерфейстің сипатталуы interface сөзінен басталады, оның алдында интерфейс класс тәрізді барлық жерден қатынауға болатынын білдіретінpublic модификаторы тұруы мүмкін. Егер public модификаторы болмаса, интерфейс тек өзінің пакетінде ғана көрінеді.Interface сөзінен кейін интерфейс аты жазылады, содан кейін extend сөзі және үтір арқылы интерфейс – тегі тізімі тұруы мүмкін. Осылайша интерфейстер интерфейстерден кластардан тәуелсіз өздерінің иеархиясын жасап туындауы да мүмкін онда интерфейстердің жиындық мұралануы жіберіледі. Бұл иеархияда тамыры жоқ, яғни ортақ тегі жоқ.
Содан кейін ирек жақшада кез келген ретпен тұрақтылар мен әдістер тақырыптары жазылады. Интерфейсте барлық әдістер абстрактілі деп айтуға болады,бірақ abstract сөзін жазып қажет емес. Тұрақтылар әрқашан статикалық болады, бірақ static және final сөздерін көрсетпесе де болады.
Интерфейстердегі барлық тұрақтылар мен әдістер әрқашан ашық, public модификаторын да көрсетпесе болады.
Осылайша, интерфейс – бұл жай ғана нобай,эскиз. Онда не істеу керек екені көрсетілген, бірақ қалай істеу керек екендігі көрсетілмеген.Қолданылатын интерфейс емес, оның іске асырылуы (implementation). Интерфейстің іске асырылуы – ол бір немесе бірнеше интерфейстердің әдістері жазылатын класс. Клас тақырыбында оның атынан кейін немесе оның суперкласының атынан кейін, егер ол бар болсаimplements сөзі жазылады және үтір арқылы интерфейстер аттары жазылады.
Автокөліктер иерархиясын былай жүзеге асыруға болады: interface Automobile{…}
interface Car extends Automobile!...} class Truck implements Automobile!...}
class Pickup extends Truck implements Car{...}
немесе былай:
interface Automobile{…}
interface Car extends Automobile{...} class Truck extends Automobile{...} class Pickup implements Car,Truck{...}
Интерфейстіңіскеасырылуытолықемесболуымүмкін,интерфейстіңкейбірәдістеріжазылған, албасқаларыжазылмағанболуымүмкін. Мұндайіскеасыру – абстрактілікласс, оныміндеттітүрде abstract модификаторыменбелгілеукерек.
Интерфейстер Java құралдарымен жобаны іске асыру сұрақтарына назар аудармай-,ақ таза обьектілі – бағытталған жобалауды іске асыруға мүмкіндік береді.
Жобаны өңдеуге кіріспес бұрын оны интерфейстер иерархиясы түрінде, оның жүзеге асырылуынойламай-ақ жазуға болады, ал содан кейін осы жоба бойынша бірлік мұраланудың шектелуімен кластар мүшелерінің көрінуін есептей отырып кластар иерархиясын тұрғызуға болады.
Интерфейстерг есілтемелер құруға болады. Әрине, мұндай сілтеме тек қандайда бір интерфейстің іске асырылуын көрсетеді. Осылай біз полиморфизмді ұйымдастырудың тағы бір тәсілін аламыз.
Дәріс №7. Жолдармен жұмыс істеу
Java тілінде мəтіндік жолдар объектілер болып табылады. Олар string немесе stringBuffer класының нұсқалары түрінде беріледі. String класының объектілерінде айнымас ұзындықтағы және мазмұнды жолдық тұрақтылар сақталады. Бұл жолдарды өңдеуді айтарлықтай жылдамдатады. . StringBuffer класының объектілерінде сақталған жолдар ұзындығын жолдар мен символдарды қою жəне қосу, астыңғы жолдарды өшіру немесе бірнеше жолдарды бір жолға біріктіре отырып ауыстыруға болады. Көп жағдайда, string типті жолдың ұзындығын өзгерту керек болғанда, Java компиляторы оны stringBuffer типіне түрлендіреді, ұзындығын өзгертеді, содан кейін қайтадан string типіне түрлендіреді. Мысалы, келесі əрекет
String s = "Бұл" + " жалғыз" + "жол";
компилятор былай орындайды:
String s = new StringBuffer().append("Бұл").append(" жалғыз ").append("жол").toString(); StringBuffer класты объект құрылады, оған жолдар тізбегі қосылады"Бұл", "жалғыз",
"жол", жəне алынған StringBuffer класты объект toString () əдісімен String типінкелтіріледі. Жолмен жұмыс істемес бұрын оны құру керек. Оны əртүрлі тəсілмен жасауға болады.
Жолды құрудың ең қарапайым тəсілі–ол string типті сілтемені жолдық-тұрақтыға ұйымдастырады:
String si = "Бұл жол.";
Егер тұрақты ұзын болса, оларды біріктіру операциясымен байланыстыра отырып, мəтіндік редактордың бірнеше жолына жазуға болады:
String s2 = "Бұлұзынжол, " +
"бастапқы мəтіннің екі жолына жазылған"; Сонымен қатар символдар массивінен жол құруға болады, мысалы:
char array[]={‘a’,’b’,’c’};String s=new String(array);
Объектілі бағытталған бағдарламалау(ОББ) көзқарасы бойынша объект құрудың ең тиімді тəсілі — бұл new операциясында оның конструкторын шақыру.String класы тоғыз конструкторды береді:
string() — бос жолы бар объект құрылады;
string (String str) — бір объектіден басқа құрылады, сондықтан бұл конструктор сирек қолданылады;
string (StringBuf fer str) — BufferString класы объектісінің түрлендірілген көшіропиясын;
string(byte[] byteArray) — объект byteArray байттар массивінен құрылады;
String (char [] charArray) — объект Unicode символдарының charArray массивінен құрылады;
String (byte [] byteArray, int offset, int count) — объект count байттардан тұратын жəне offset индексінен басталатын, byteArray байттар массивінің бөлігінен құралады;
String (char [] charArray, int offset, int count) — алдыңғыдай, бірақ массив Unicode
символдарынан тұрады;
String(byte[] byteArray, String encoding) — байттар массивінде жазылған символдар encoding кодталу есебімен Unicode-жолында беріледі;
String(byte[] byteArray, int offset, int count, String encoding) — бұлдасондай, бірақ тек массив бөлігі үшін.
Оffset, count индекстерін немесе encoding кодталуын дұрыс бермегенде келеңсіз жағдайлар туындайды.
Жолдармен плюс +белгісімен белгіленетін жолдардың айқасуы операциясын жүргізуге болады. Бұл операция бірінші жəне екінші жолдардың қиылысуынан құралған жаңа жол құрады. Оны тұрақтыларға да, айнымалыларға да қолдануға болады. Мысалы:
String attention = "Назараударыңыз: "; String s = attention + "белгісізсимвол";
Екіншіоперация — меншіктеу += - солжақтағыайнымалыларғақолданылады: attention += s;
Жолдың ұзындығын, яғни ондағы символдар санын білу үшін length() əдісінқолдану керек:
String s = "Write once, run anywhere."; int len = s.length{);
немесе
int len = "Write once, run anywhere.".length();
жолдық-тұрақты – string класыныңтолықобъектісі.
Ind индексті (бірінші символдың индексі нольге тең) символ таңдау үшін charAt(int ind) əдісін қолдануға болады. Егер ind индекстері немесе жолдың ұзындығынан аз болмаса, келеңсіз жағдай туындайды. Мысалы, келесі анықтамадан кейін
char ch = s.charAt(3);
chайнымалысы 't' мəнінқабылдайды.
Символдар массиві түріндег іжолдың барлық символдарын,символдар массивін қайтаратын toCharArray() əдісіменалуғаболады.
Егер dst символдар мАссивіне ind индексінен бастап, begin индексімен бірге end индексіне дейін (end индексі кірмейді), ішкі жол қосу керек болса, онда void типті getChars(int begin, int end, char[] dst, int ind) əдісіқолданылады.
Массивке ind индексінен ind + (end - begin) – 1 индексіне дейінгі массив элементтерінен тұратын, end - begin символдары жазылады.
Бұл əдіс келесі жағдайларда ерекше жағдайлар құрады:
dst сілтемесі = null;
begin индексі теріс;
begin индексі end индексінен үлкен;
end индексі жол ұзындығынан үлкен;
ind индексі теріс;
6. ind + (end — begin) > dst.length.
Егер ASCII байттық кодтауындағы жолдардың барлық символдарынан тұратын байттар массивін алу керек болса, онда getBytes() əдісін қолдану керек.
Бұл əдіс символдарды Unicode-тан ASCII-қа аударғанда жергілікті кодтау кестесін қолданады.
Егерде байттар массивін жергілікті кодтауда ,емес басқа да алсақ, getBytes(String encoding) əдісі қолданылады.
Sub string(int begin, int end) əдісі ішкі жолды символдан begin индексімен бірге символға дейін end индексін қоспай белгілейді. Ішкі жолдың ұзындығы end – begin теңболады.
Substring (int begin) əдісі ішкі жолды begin индексінен бастап жолдың соңына дейін ерекшелейді.
Егер индекстер теріс болса, end индексі жолдың ұзындығынан үлкен болса немесе begin end-кеқарағанда үлкен болса, онда ерекше жағдай туындайды.
Мысалы, мынаорындалуданкейін
String s = "Write onсe, run anywhere."; String sub1 = s.substring(6, 10);
String sub2 = s.substring(16);
sub1жолында "once" мəнін, ал sub2 - "anywhere" мəніналамыз.
Салыстыру операциясы = тек сілтемелерді жолдарға салыстырып қояды. Ол сілтемелер тек бір ғана жолға көрсетеме сонны анықтайды. Мысалы, жолдар үшін
String s1 = "Кезкелгенжол"; String s2 = "Басқажол";
салыстыру s1 == s2 нəтижесінде false береді.
True мəні орындалады, тек қана егер ек сілтемеде бір жолға ғана көрсетілсе, мысалы, si = s2 меншіктеуден кейін.
Іздеу əрқашан əріптер көрсеткіші есебімен жүргізіледі.Берілген this жолында ch символының алғашқы пайда болуын indexOf(int ch) əдісімен байқауға болады, ол осы символдың индексін жолда қайтарады немесе -1-деқайтарады, егер ch символы this жолында жоқ болса.
Мысалы, "Молоко", indexOf('о') нəтижесінде 1-дібереді.
Берілген this жолға sub ішкіжолыныңбіріншіенуін indexof (String sub) əдісііздейді. Ол sub ішкі жолының бірінші енуінің бірінші символының индексін жолға қайтарады немесе-1-ге қайтарады, егер sub ішкі жолы this жолына кірмесе. Мысалы, " Раскраска ".indexof ("рас") нəтижесінде 4-тібереді.
Егер іздеуді жолдың басынан емес, қандайда бір ind индекстен бастасақ, index Of (String sub, int ind) əдісін қолдану керек. Егер ind < 0 болса, онда іздеу жолдың басынан басталады, ал егер ind жолдың ұзындығынан үлкен болса, онда символ ізделінбейді, яғни -1 қайтарылады.
Берілген this жолына sub аудармасының соңғы енуін last indexof(string sub) əдісімен іздеп табуға болады, ол this жолына sub ішкі жолының соңғы енуінің бірінші символының индексін қайтарады немесе (-1), егер sub ішкі жолы this жолына енбесе.
Sub ішкі жолының this жолының бəріне емес, оның басына, яғни ind индексіне дейін ғана соңғы енуін lastIndexof(String stf, int ind) əдісімен іздеуге болады.Егер ind жолдың ұзындығынан үлкен болса, онда іздеу жолдың соңынан жүргізіледі, егер ind < 0 болса, онда -1 қайтарылады.
To Lower Case() əдісі барлық əріптері төменгі регистрге,яғни кіші əріптерге ауысатын жаңа жолды қайтарады.
To UpperCase() əдісі барлық əріптері жоғарғы регистрге,яғни бас əріптерге ауысатын жаңа жолды қайтарады.
Мұнда үнсіз келісім бойынша жергілікті кодты кесте қолданылады. Егер басқа локаль қажет болса, онда to LowerCase(Locale loc) жəне toUpperCase(Locale loc) əдістері қолданылады.
Replace(int old, int new) əдісі old символының барлық енуі new символымен алмастырылған жаңа жолды қайтарады. Егер old символы жолда жоқ болса, онда сілтеме бастапқы жолға қайтарылады.
Əріптер регистрі алмасу кезінде есептеледі.
Trim() əдісі '\u0020' аспайтын кодтары бар, бастапқы жəне соңғы символдары өшірілген жаңа жолды қайтарады.
Сандардың жолға түрленуі келесі түрде іске асады: Int i=10; String s=”” + I;
Жолдың бір символының басқамен алмасуы келесі түрде орындалады: s=s.replace(‘a’,’o’);
Қай орыннан бір жолдың екіншіге өтетінін анықтауға болады: int i=s.indexOf(“ab”);
Егер “ab” ішкі жолы s жолында болмаса, онда -1 мəні қайтарылады.
Дәріс №8. Алып тастауларды өңдеу
Исключение в Java — это объект, который описывает исключительное состояние, возникшее в каком-либо участке программного кода. Когда возникает исключительное состояние, создается объект класса Exception. Этот объект пересылается в метод, обрабатывающий данный тип исключительной ситуации. Исключения могут возбуждаться и «вручную» для того, чтобы сообщить о некоторых нештатных ситуациях.
Основы
К механизму обработки исключений в Java имеют отношение 5 ключевых слов: — try, catch, throw, throws и finally. Схема работы этого механизма следующая. Вы пытаетесь (try) выполнить блок кода, и если при этом возникает ошибка, система возбуждает (throw) исключение, которое в зависимости от его типа вы можете перехватить (catch) или передать умалчиваемому (finally) обработчику.
Ниже приведена общая форма блока обработки исключений.
try {
// блок кода }
catch (ТипИсключения1 е) {
// обработчик исключений типа ТипИсключения1 }
catch (ТипИсключения2 е) {
// обработчик исключений типа ТипИсключения2
throw(e) // повторное возбуждение исключения }
finally {
}
ЗАМЕЧАНИЕ
В языке Delphi вместо ключевого слова catch используется except.
Типы исключений
В вершине иерархии исключений стоит класс Throwable. Каждый из типов исключений является подклассом класса Throwable. Два непосредственных наследника класса Throwable делят иерархию подклассов исключений на две различные ветви. Один из них — класс Ехception — используется для описания исключительных ситуации, которые должны перехватываться программным кодом пользователя. Другая ветвь дерева подклассов Throwable — класс Error, который предназначен для описания исключительных ситуаций, которые при обычных условиях не должны перехватываться в пользовательской программе.
Неперехваченные исключения
Объекты-исключения автоматически создаются исполняющей средой Java в результате возникновения определенных исключительных состояний. Например, очередная наша программа содержит выражение, при вычислении которого возникает деление на нуль.
class Exc0 {
public static void main(string args[]) {
int d = 0;
int a = 42 / d;
} }
Вот вывод, полученный при запуске нашего примера.
С:\> java Exc0
java.lang.ArithmeticException: / by zero
at Exc0.main(Exc0.java:4)
Обратите внимание на тот факт что типом возбужденного исключения был не Exception и не Throwable. Это подкласс класса Exception, а именно: ArithmeticException, поясняющий, какая ошибка возникла при выполнении программы. Вот другая версия того же класса, в которой возникает та же исключительная ситуация, но на этот раз не в программном коде метода main.
class Exc1 {
static void subroutine() {
int d = 0;
int a = 10 / d;
}
public static void main(String args[]) {
Exc1.subroutine();
} }
Вывод этой программы показывает, как обработчик исключений исполняющей системы Java выводит содержимое всего стека вызовов.
С:\> java Exc1
java.lang.ArithmeticException: / by zero
at Exc1.subroutine(Exc1.java:4)
at Exc1.main(Exc1.java:7)
try и catch
Для задания блока программного кода, который требуется защитить от исключений, используется ключевое слово try. Сразу же после try-блока помещается блок catch, задающий тип исключения которое вы хотите обрабатывать.
class Exc2 {
public static void main(String args[]) {
try {
int d = 0;
int a = 42 / d;
}
catch (ArithmeticException e) {
System.out.println("division by zero");
}
} }
Целью большинства хорошо сконструированных catch-разделов должна быть обработка возникшей исключительной ситуации и приведение переменных программы в некоторое разумное состояние — такое, чтобы программу можно было продолжить так, будто никакой ошибки и не было (в нашем примере выводится предупреждение – division by zero).
Несколько разделов catch
В некоторых случаях один и тот же блок программного кода может возбуждать исключения различных типов. Для того, чтобы обрабатывать подобные ситуации, Java позволяет использовать любое количество catch-разделов для try-блока. Наиболее специализированные классы исключений должны идти первыми, поскольку ни один подкласс не будет достигнут, если поставить его после суперкласса. Следующая программа перехватывает два различных типа исключений, причем за этими двумя специализированными обработчиками следует раздел catch общего назначения, перехватывающий все подклассы класса Throwable.
class MultiCatch {
public static void main(String args[]) {
try {
int a = args.length;
System.out.println("a = " + a);
int b = 42 / a;
int c[] = { 1 };
c[42] = 99;
}
catch (ArithmeticException e) {
System.out.println("div by 0: " + e);
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("array index oob: " + e);
}
} }
Этот пример, запущенный без параметров, вызывает возбуждение исключительной ситуации деления на нуль. Если же мы зададим в командной строке один или несколько параметров, тем самым установив а в значение больше нуля, наш пример переживет оператор деления, но в следующем операторе будет возбуждено исключение выхода индекса за границы массива ArrayIndexOutOf Bounds. Ниже приведены результаты работы этой программы, запущенной и тем и другим способом.
С:\> java MultiCatch
а = 0
div by 0: java.lang.ArithmeticException: / by zero
C:\> java MultiCatch 1
a = 1
array index oob: java.lang.ArrayIndexOutOfBoundsException: 42
Достарыңызбен бөлісу: |