Пакеттер мен интерфейстер

Пакеттер мен интерфейстер
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 құралдарымен жобаны іске асыру сұрақтарына назар аудармай-,ақ таза обьектілі – бағытталған жобалауды іске асыруға мүмкіндік береді.
Жобаны өңдеуге кіріспес бұрын оны интерфейстер иерархиясы түрінде, оның жүзеге асырылуынойламай-ақ жазуға болады, ал содан кейін осы жоба бойынша бірлік мұраланудың шектелуімен кластар мүшелерінің көрінуін есептей отырып кластар иерархиясын тұрғызуға болады.
Интерфейстерг есілтемелер құруға болады. Әрине, мұндай сілтеме тек қандайда бір интерфейстің іске асырылуын көрсетеді. Осылай біз полиморфизмді ұйымдастырудың тағы бір тәсілін аламыз.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *