JavaRush /Java блогы /Random-KK /Java тіліндегі инкапсуляция принциптері

Java тіліндегі инкапсуляция принциптері

Топта жарияланған
Сәлеметсіз бе! Бүгінгі дәріс инкапсуляцияға арналады және біз оны бірден мысалдармен бастаймыз :) Сіздің алдыңызда таныс сода машинасы. Сізге бір сұрағым бар: ол қалай жұмыс істейді? Егжей-тегжейлі жауап беруге тырысыңыз: стақан қайдан келеді, ішіндегі температура қалай сақталады, мұз қайда сақталады, машина қандай сиропты қосу керектігін қалай түсінеді және т.б. Сірә, сізде бұл сұрақтарға жауап жоқ. Мүмкін, мұндай машиналарды бәрі бірдей пайдаланбауы мүмкін, олар қазіргі уақытта соншалықты танымал емес. Тағы бір мысал келтіруге тырысайық. Сіз білетін нәрсе, сіз күнде бірнеше рет пайдаланасыз. О, менде бір идея бар! Google іздеу жүйесіИнкапсуляция принциптері - 2 қалай жұмыс істейтінін айтыңыз . Ол сіз енгізген сөздерге негізделген ақпаратты қалай дәл іздейді? Неліктен бұл нәтижелер басқалары емес, жоғарғы жағында? Сіз Google-ды күнде қолдансаңыз да, оны білмеуіңіз мүмкін. Бірақ бұл маңызды емес. Өйткені, мұны білудің қажеті жоқ. Сіз іздеу жүйесіне оның қалай жұмыс істейтінін ойламай-ақ сұрауларды енгізе аласыз. Газдалған суды автоматтан оның қалай жұмыс істейтінін білмей-ақ сатып алуға болады. Сіз автомобильді іштен жанатын қозғалтқыштың жұмысын зерттемей-ақ, тіпті мектеп деңгейінде де физиканы мүлде білмей-ақ жүргізе аласыз. Мұның бәрі an objectілі-бағытталған бағдарламалаудың негізгі принциптерінің бірі - инкапсуляцияның арқасында мүмкін болды . Осы тақырып бойынша әртүрлі мақалаларды оқып отырып, сіз бағдарламалауда екі жалпы ұғым бар екеніне тап болған шығарсыз - инкапсуляция және жасыру . Ал «инкапсуляция» сөзі арқылы авторлар бір немесе басқа нәрсені білдіреді (болғандай). Толық түсінікті болу үшін біз екі терминді де бөлеміз. Бағдарламалаудағы « инкапсуляция » сөзінің бастапқы мағынасы бір бумада («капсула») деректер мен осы деректермен жұмыс істеу әдістерінің қосындысы болып табылады . Java тілінде сынып капсула пакеті ретінде әрекет етеді . Класта деректер (сынып өрістері) және осы деректермен жұмыс істеу әдістері бар. Бұл сізге түсінікті болып көрінеді, бірақ басқа бағдарламалау тұжырымдамаларында бәрі басқаша жұмыс істейді. Мысалы, функционалдық бағдарламалауда деректер ондағы операциялардан қатаң түрде бөлінген. OOP-та (an objectіге бағытталған бағдарламалау) бағдарламалар капсула кластарынан тұрады, олар әрі деректер, әрі онымен жұмыс істеу функциялары болып табылады. Енді жасыру туралы сөйлесейік . Біз олардың қалай жұмыс істейтінін және жұмысының негізін түсінбей, әртүрлі күрделі механизмдерді қалай қолданамыз? Бұл қарапайым: оларды жасаушылар қарапайым және ыңғайлы интерфейсті қамтамасыз еттіИнкапсуляция принциптері - 3. Сода машинасында интерфейс панельдегі түймелер болып табылады. Бір түймені басу арқылы сіз әйнектің дыбыс деңгейін таңдайсыз. Екіншісін басу арқылы сіз сиропты таңдайсыз. Үшіншісі мұз қосуға жауапты. Ал мұның бәрі сізге қажет. Құрылғының ішінде қаншалықты нақты жобаланғаны маңызды емес. Ең бастысы, ол сода алу үшін пайдаланушыға үш түймені басу керек етіп жасалған . Көлікпен де солай. Оның ішінде не болып жатқаны маңызды емес. Ең бастысы, оң жақ педальды басқан кезде көлік алға жылжиды, ал сол жақ педальды басқанда баяулайды . Бұл жасырудың дәл мәні. Бағдарламаның барлық «ішкі жағы» пайдаланушыдан жасырылады. Ол үшін бұл ақпарат артық және қажет емес. Пайдаланушыға ішкі процесс емес, соңғы нәтиже қажет. Мысал ретінде сыныпты қарастырайық Auto:
public class Auto {

   public void gas() {

       /*some complicated things are happening inside the car
       as a result of which it goes forward*/
   }

   public void brake() {

       /*some complicated things are happening inside the car
       as a result of which it slows down*/
   }

   public static void main(String[] args) {

       Auto auto = new Auto();

       // How everything looks to the user

       //pressed one pedal - went
       auto.gas();

       //pressed another pedal - braked
       auto.brake();
   }
}
Java бағдарламасында іске асыруды жасыру осылай көрінеді. Барлығы нақты өмірдегідей: пайдаланушы интерфейспен (әдістермен) қамтамасыз етілген. Егер оған әрекетті орындау үшін бағдарламада көлік қажет болса, оған қажетті әдісті шақыру жеткілікті. Және бұл әдістердің ішінде орын алатын нәрсе - бұл қажетсіз ақпарат, бастысы - бәрі қажет болғандай жұмыс істейді. Мұнда біз іске асыруды жасыру туралы айттық . Бұдан басқа, Java-да деректерді жасыру мүмкіндігі бар . Біз бұл туралы лекцияда гетерлер мен сеттерлер туралы жазғанбыз , бірақ еске салудың еш зияны жоқ. Мысалы, бізде сынып бар Cat:
public class Cat {

   public String name;
   public int age;
   public int weight;

   public Cat(String name, int age, int weight) {
       this.name = name;
       this.age = age;
       this.weight = weight;
   }

   public Cat() {
   }

   public void sayMeow() {
       System.out.println("Meow!");
   }


}
Соңғы лекциядан бұл сыныптың мәселесі неде екені естеріңізде шығар? Олай болмаса, еске түсірейік. Мәселе мынада, оның деректері (өрістері) барлығына ашық, ал басқа бағдарламашы бағдарламада салмағы 0 және жасы -1000 жыл болатын атаусыз мысықты оңай жасай алады:
public static void main(String[] args) {

   Cat cat = new Cat();
   cat.name = "";
   cat.age = -1000;
   cat.weight = 0;

}
Мұндай жағдайда сіз әріптестеріңіздің бірі дұрыс емес күйдегі нысандарды жасап жатқанын мұқият бақылай аласыз, бірақ мұндай «дұрыс емес нысандарды» жасау мүмкіндігін жоққа шығарған дұрыс. Инкапсуляция принциптері - 4 Олар бізге деректерді жасыруға көмектеседі:
  1. қатынас модификаторлары ( жеке , қорғалған , әдепкі пакет );
  2. алушылар мен орнатушылар.
Онда біз, мысалы, біреудің мысыққа оның жасына байланысты теріс сан тағайындауға тырысып жатқанын тексере аламыз. Жоғарыда айтқанымыздай, инкапсуляция туралы әртүрлі мақалалардың авторлары инкапсуляцияны (деректер мен әдістерді біріктіру) немесе жасыруды немесе екеуін де білдіреді. Java-да екі механизм де бар (басқа OOP тілдерінде бұл міндетті емес), сондықтан соңғы нұсқа ең дұрысы. Инкапсуляцияны пайдалану бізге бірнеше маңызды артықшылықтар береді:
  1. Объектінің дұрыс күйін бақылау. Жоғарыда мысалдар болды: орнатушы мен жеке модификатордың арқасында біз бағдарламамызды салмағы 0 болатын мысықтардан қорғадық.

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

  3. Кодқа енгізілген өзгерістер пайдаланушыларға әсер етпейді. Біз барлық өзгерістерді әдістердің ішіне енгіземіз. Бұл пайдаланушыға әсер етпейді: ол автокөліктің газы үшін auto.gas() деп жазды, сондықтан оны жазады. Және gas() әдісінің жұмысында бірдеңені өзгерткеніміз оған көрінбейтін болып қалады: ол бұрынғыдай жай ғана қалаған нәтижені алады.
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION