JavaRush /Блоги Java /Random-TG /Принсипҳои инкапсуляция дар Java

Принсипҳои инкапсуляция дар Java

Дар гурӯҳ нашр шудааст
Салом! Лекцияи имруза ба инкапсуляция бахшида мешавад ва мо онро дархол бо мисолхо сар мекунем :) Дар назди шумо машинаи содаи шинос аст. Ман ба шумо як савол дорам: он чӣ гуна кор мекунад? Кӯшиш кунед, ки ба таври муфассал ҷавоб диҳед: шиша аз куҷо меояд, ҳарорати дохor он чӣ гуна нигоҳ дошта мешавад, ях дар куҷо нигоҳ дошта мешавад, мошин чӣ гуна мефаҳмад, ки кадом сиропро илова кардан лозим аст ва ғайра. Эҳтимол, шумо ба ин саволҳо ҷавоб надоред. Хуб, шояд на ҳама чунин мошинҳоро истифода баранд, онҳо имрӯз чандон маъмул нестанд. Биёед боз як мисол оварем. Чизе, ки шумо медонед, ҳар рӯз чанд маротиба истифода мебаред. Оҳ, ман як идея дорам! Принсипҳои инкапсуляция - 2 Ба мо бигӯед, ки системаи ҷустуҷӯии Google чӣ гуна кор мекунад . Чӣ тавр он маълумотро дар асоси калимаҳои воридкардаи шумо ҷустуҷӯ мекунад? Чаро ин натиҷаҳо дар боло ҳастанд, на дигарон? Гарчанде ки шумо Google-ро ҳамарӯза истифода мебаред, шумо эҳтимол онро намедонед. Аммо муҳим нест. Баъд аз ҳама, ба шумо лозим нест, ки инро бидонед. Шумо метавонед дархостҳоро ба муҳаррики ҷустуҷӯ бидуни андеша дар бораи он ки чӣ тавр кор мекунад, ворид кунед. Шумо метавонед содаро аз автомат бе донед, ки он чй тавр кор мекунад. Шумо метавонед мошинро бидуни омӯхтани кори муҳаррики дарунсӯзӣ ва бидуни надонистани физика умуман, ҳатто дар сатҳи мактаб идора кунед. Ҳамаи ин ба шарофати яке аз принсипҳои асосии барномасозии ба an object нигаронидашуда - инкапсуляция имконпазир аст . Ҳангоми хондани мақолаҳои гуногун дар ин мавзӯъ, шумо эҳтимол ба он вохӯред, ки дар барномасозӣ ду мафҳуми маъмул вуҷуд дорад - инкапсуляция ва пинҳон кардан . Ва бо калимаи «инкапсуляция» муаллифон ин ё он чизро дар назар доранд (чунон ки ин тавр мешавад). Мо ҳарду истилоҳро тақсим мекунем, то шумо фаҳмиши комил дошта бошед. Маънои аслии калимаи “ инкапсуляция ” дар барномасозӣ маҷмӯи додаҳо ва усулҳои кор бо ин додаҳо дар як баста (“капсула”) мебошад . Дар Java, синф ҳамчун бастаи капсула амал мекунад . Синф дорои маълумот (майдонҳои синф) ва усулҳои кор бо ин додаҳо мебошад. Принципы инкапсуляции - 3 Ин ба шумо равшан менамояд, аммо дар дигар консепсияҳои барномасозӣ ҳама чиз ба таври дигар кор мекунад. Масалан, дар барномасозии функсионалӣ маълумот аз амалиётҳои он ба таври қатъӣ ҷудо карда мешавад. Дар OOP (барномасозии ба an object нигаронидашуда) барномаҳо аз синфҳои капсула иборатанд, ки ҳам маълумот ва ҳам функсияҳои кор бо он мебошанд. Акнун биёед дар бораи пинҳон кардан сӯҳбат кунем . Мо чй тавр аст, ки мо аз хар гуна механизмхои мураккаб истифода бурда, нафахмидем, ки онхо чй тавр кор мекунанд ва кори онхо ба чй асос ёфтааст? Ин оддӣ аст: созандагони онҳо интерфейси оддӣ ва барои истифодабарандагонро фароҳам овардаанд. Дар мошини сода, интерфейс тугмаҳои дар панел аст. Бо пахш кардани як тугма, шумо ҳаҷми шишаро интихоб мекунед. Бо пахш кардани дуюм, шумо шарбатро интихоб мекунед. Сеюм барои илова кардани ях масъул аст. Ва ин ҳама ба шумо лозим аст. Муҳим нест, ки мошин дар дохor он чӣ гуна тарҳрезӣ шудааст. Муҳим он аст, ки он тавре тарҳрезӣ шудааст, ки барои гирифтани сода, корбар бояд се тугмаро пахш кунад . Бо мошин низ ҳамин тавр аст. Фарқ надорад, ки дар дохor ӯ чӣ мегузарад. Чизи асосиаш он аст, ки хангоми пахш кардани педали рост мошин пеш меравад ва хангоми пахш кардани педали чап суръати онро паст мекунад . Мохияти пинхон доштан махз дар хамин аст. Ҳама "даруни" барнома аз истифодабаранда пинҳон аст. Барои ӯ ин маълумот зиёдатӣ ва нолозим аст. Истифодабаранда ба натиҷаи ниҳоӣ ниёз дорад, на ба раванди дохилӣ. Биёед ба синф ҳамчун намуна назар кунем 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 ба назар мерасад. Ҳама чиз мисли ҳаёти воқеӣ аст: истифодабаранда бо интерфейс (усулҳо) таъмин карда мешавад. Агар ба ӯ мошин дар барнома барои иҷрои амал лозим бошад, ӯ танҳо лозим аст, ки усули дилхоҳро даъват кунад. Ва он чизе, ки дар дохor ин усулҳо рӯй медиҳад, иттилооти нолозим аст, чизи асосӣ ин аст, ки ҳама чиз тавре ки лозим аст, кор мекунад. Дар ин ҷо мо дар бораи пинҳон кардани татбиқ сӯҳбат кардем . Ғайр аз ин, 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!");
   }


}
Шояд шумо аз лексияи охирин дар хотир доред, ки мушкorи ин синф чист? Агар не, биёед ба ёд орем. Мушкилот дар он аст, ки маълумоти (майдонҳои) ӯ барои ҳама кушода аст ва як барномасози дигар метавонад ба осонӣ дар барнома як гурбаи беномро бо вазни 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. Мониторинги ҳолати дурусти an object. Дар боло мисолҳои инҳо буданд: ба шарофати танзимкунанда ва тағирдиҳандаи хусусӣ, мо барномаи худро аз гурбаҳои вазни 0 муҳофизат кардем.

  2. Дӯстона барои корбар аз сабаби интерфейс. Мо танҳо усулҳоро барои дастрасии корбар "берун" мегузорем. Барои ба даст овардани натиҷа танҳо ба онҳо занг задан лозим аст ва ба ӯ умуман лозим нест, ки ҷузъиёти кори онҳоро омӯзад.

  3. Тағирот ба code ба корбарон таъсир намерасонад. Мо ҳама тағиротҳоро дар дохor усулҳо мекунем. Ин ба корбар таъсир намерасонад: ӯ auto.gas()-ро барои гази мошин навишт, пас вай онро менависад. Ва факте, ки мо дар кори усули газ() чизеро тагьир додем, барои у ноаён мемонад: вай мисли пештара факат натичаи дилхох мегирад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION