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

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

Группада жарыяланган
Салам! Бүгүнкү лекция инкапсуляцияга арналат жана биз аны дароо мисалдар менен баштайбыз :) Сиздин алдыңызда тааныш сода машинасы турат. Менин сизге бир суроом бар: ал кантип иштейт? Толук жооп берүүгө аракет кылыңыз: айнек кайдан келет, ичиндеги температура кандай сакталат, муз кайда сакталат, машина кандай сироп кошууну түшүнөт ж.б.у.с. Кыязы, сизде бул суроолорго жооп жок. Ооба, балким, баары эле мындай машиналарды колдоно бербейт, алар азыркы учурда анча популярдуу эмес. Дагы бир мисал келтирүүгө аракет кылалы. Сиз билген нерсени күн сайын көп жолу колдоносуз. О, менде бир идея бар! Google издөө системасыИнкапсуляция принциптери - 2 кантип иштээрин айтып бериңиз . Сиз киргизген сөздөрдүн негизинде маалыматты кантип так издейт? Эмне үчүн бул жыйынтыктар жогоруда, башкалар эмес? Google'ду күн сайын колдонсоңуз да, аны билбесеңиз керек. Бирок бул маанилүү эмес. Анткени, муну бorштин кереги жок. Сиз издөө системасына анын так кантип иштээри жөнүндө ойлонбой туруп эле сурамдарды киргизсеңиз болот. Сода кантип иштээрин билбей туруп, автоматтан сатып алсаңыз болот. Сиз машинаны ичтен күйүүчү кыймылдаткычтын иштөөсүнө тереңдеп кирбестен, физиканы такыр билбестен, атүгүл мектеп деңгээлинде айдай аласыз. Мунун баары an objectиге багытталган программалоонун негизги принциптеринин бири - инкапсуляциянын аркасында мүмкүн . Бул тема боюнча ар кандай макалаларды окуп жатып, сиз, балким, программалоодо эки жалпы түшүнүк бар экенин көрдүңүз - инкапсуляция жана жашыруу . Ал эми "инкапсуляция" деген сөз менен авторлор тигил же бул нерсени (болгондой) билдирет. Толук түшүнүккө ээ болушуңуз үчүн биз эки терминди тең бөлүшөбүз. Программалоодогу “ инкапсуляция ” сөзүнүн түпнуска мааниси бул маалыматтар менен иштөө ыкмаларынын бир пакетте (“капсула”) айкалышы. Java тorнде класс капсула пакетинин ролун аткарат . Класста маалыматтар (класс талаалары) жана бул маалыматтар менен иштөө ыкмалары бар. Бул сизге ачык көрүнөт, бирок башка программалоо концепцияларында баары башкача иштейт. Мисалы, функционалдык программалоодо маалыматтар андагы операциялардан катуу ажыратылат. 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;

}
Мындай кырдаалда сиз кесиптештериңиздин бири туура эмес абалдагы an objectтерди түзүп жатканын кылдаттык менен көзөмөлдөй аласыз, бирок мындай "туура эмес an objectтерди" түзүү мүмкүнчүлүгүн жокко чыгарганыңыз жакшы болот. Инкапсуляция принциптери - 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