JavaRush /Блоги Java /Random-TG /Принсипҳои OOP

Принсипҳои OOP

Дар гурӯҳ нашр шудааст
Салом! Оё шумо ягон бор фикр кардаед, ки чаро Java чунин тарҳрезӣ шудааст? Ба маънои он, ки шумо синфҳо эҷод мекунед, дар асоси онҳо - an objectҳо, синфҳо методҳо ва ғайра доранд. Аммо чаро сохтори забон чунин аст, ки барномаҳо аз синфҳо ва an objectҳо иборатанд, на аз чизи дигар? Чаро мафхуми «an object»-ро ихтироъ карда, дар мадди аввал гузоштанд? Оё ҳама забонҳо ҳамин тавр кор мекунанд ва агар не, он ба Java чӣ фоида меорад? Тавре ки мебинед, саволҳо зиёданд :) Биёед кӯшиш кунем, ки дар лексияи имрӯза ба ҳар яки онҳо ҷавоб диҳем.

Принсипҳои OOP:

  1. Мерос
  2. Абстраксия
  3. Инкапсуляция
  4. Полиморфизм

Барномасозии ба an object нигаронидашуда (OOP) чист?

Албатта, Java бо ягон сабаб аз an objectҳо ва синфҳо иборат аст. Ин ҳаваси эҷодкорон ва ҳатто ихтирои онҳо нест. Бисёр забонҳои дигаре ҳастанд, ки ба an objectҳо асос ёфтаанд. Аввалин чунин забон Simula ном дошт ва он ҳанӯз дар солҳои 1960 дар Норвегия ихтироъ шуда буд. Дар байни чизҳои дигар, Simula мафҳумҳои " синф " ва " метод " -ро муаррифӣ кард. Принсипҳои барномасозии ба an object нигаронидашуда - 2
Кристен Нигаард ва Оле Йохан Дал - созандагони Simula
Чунин ба назар мерасад, ки Simula аз рӯи стандартҳои барномасозӣ забони қадимист, аммо иртиботи "оила"-и онҳо бо Java ба чашми оддӣ намоён аст. Эҳтимол, шумо метавонед codeи дар он навишташударо ба осонӣ хонед ва ба таври умумӣ шарҳ диҳед, ки он чӣ кор мекунад :)
Begin
  Class Rectangle (Width, Height); Real Width, Height;

   Begin
      Real Area, Perimeter;

      Procedure Update;
      Begin
        Area := Width * Height;
              OutText("Rectangle is updating, Area = "); OutFix(Area,2,8); OutImage;
        Perimeter := 2*(Width + Height);
              OutText("Rectangle is updating, Perimeter = "); OutFix(Perimeter,2,8); OutImage;
      End of Update;

      Update;
      OutText("Rectangle created: "); OutFix(Width,2,6);
      OutFix(Height,2,6); OutImage;
   End of Rectangle;

       Rectangle Class ColouredRectangle (Color); Text Color;

  Begin
      OutText("ColouredRectangle created, color = "); OutText(Color);
      OutImage;
        End of ColouredRectangle;


         Ref(Rectangle) Cr;
   Cr :- New ColouredRectangle(10, 20, "Green");
End;
Намунаи рамз аз мақолаи Simula - 50 солагии OOP гирифта шудааст . Тавре ки мебинед, Java ва аҷдоди он аз ҳамдигар чандон фарқ надоранд :) Ин ба он вобаста аст, ки пайдоиши Simula ба тавлиди консепсияи нав - барномасозии ба an object нигаронидашуда ишора кард. Википедиа таърифи зерини OOP медиҳад: Барномасозии ба an object нигаронидашуда (OOP) методологияи барномасозӣ аст, ки ба муаррифии барнома ҳамчун маҷмӯи an objectҳо асос ёфтааст, ки ҳар яки онҳо намунаи синфи мушаххас мебошанд ва синфҳо иерархияи меросиро ташкил медиҳанд. Ин, ба назари ман, хеле муваффақ аст. Шумо ба наздикӣ ба омӯзиши Java шурӯъ кардаед, аммо дар он қариб ягон калимае вуҷуд надорад, ки барои шумо ношиносанд :) Имрӯз, OOP методологияи маъмултарини барномасозӣ мебошад. Ба ғайр аз Java, принсипҳои OOP дар бисёр забонҳои маъмул истифода мешаванд, ки шумо шояд онҳоро шунидаед. Инҳо C++ (онро таҳиягарони бозиҳои компютерӣ фаъолона истифода мебаранд), Objective-C ва Swift (онҳо барои дастгоҳҳои Apple барномаҳо менависанд), Python (дар омӯзиши мошинсозӣ бештар талабот доранд), PHP (яке аз маъмултарин забонҳои таҳияи веб), JavaScript (соддатар мегӯянд, ки онҳо дар он чӣ кор намекунанд) ва бисёр дигарон. Воқеан, ин «принсипҳои» OOP чист? Биёед ба шумо муфассалтар нақл кунем.

Принсипҳои OOP

Ин асосҳост. 4 хусусияти асосие, ки якҷоя парадигмаи барномасозии ба an object нигаронидашударо ташкил медиҳанд. Фаҳмидани онҳо калиди барномасози муваффақ шудан аст. Принсипҳои барномасозии ба an object нигаронидашуда - 3

Принсипи 1. Мерос

Хабари хуш ин аст, ки шумо аллакай бо баъзе принсипҳои OOP шинос ҳастед! :) Мо аллакай дар лексияҳо бо мерос ду бор дучор шудаем ва барои кор кардан бо он вақт пайдо кардем. Мерос як механизмест, ки ба шумо имкон медиҳад, ки синфи навро дар асоси синфи мавҷуда (волид) тавсиф кунед. Дар ин ҳолат, хосиятҳо ва функсияҳои синфи волидайн аз ҷониби синфи нав гирифта мешаванд. Чаро мерос зарур аст ва он чӣ гуна имтиёзҳоро медиҳад? Пеш аз ҳама, истифодаи такрории code. Майдонҳо ва усулҳои дар синфҳои волидайн тавсифшуда метавонанд дар синфҳои наслӣ истифода шаванд. Агар ҳамаи намудҳои мошинҳо 10 майдони умумӣ ва 5 усули якхела дошта бошанд, ба шумо танҳо лозим аст, ки онҳоро ба синфи волидайн гузоред Auto. Шумо метавонед онҳоро дар синфҳои наслӣ бидуни мушкилот истифода баред. Афзалиятҳои устувор: ҳам аз ҷиҳати миқдорӣ (камтар code) ва ҳам дар натиҷа сифатӣ (синфҳо хеле соддатар мешаванд). Дар айни замон, механизми мерос хеле чандир аст ва шумо метавонед функсияҳои нопадидро дар наслҳо алоҳида илова кунед (баъзе майдонҳо ё рафтори хоси синфи мушаххас). Умуман, чун дар ҳаёти оддӣ: мо ҳама аз баъзе ҷиҳатҳо ба волидони худ монанд ҳастем, аммо аз баъзе ҷиҳатҳо аз онҳо фарқ мекунем :)

Принсипи 2. Абстраксия

Ин як принсипи хеле оддӣ аст. Абстраксия маънои равшан кардани хусусиятҳои асосӣ, муҳимтарини an object ва баръакс - партофтани хусусиятҳои дуюмдараҷа ва ночизро дорад. Биёед чархро аз нав ихтироъ накунем ва мисоли лексияи кӯҳнаро дар бораи синфҳо ба ёд орем. Фарз мекунем, ки мо кабинети файлии кормандони ширкатро ташкил мекунем. Барои сохтани an objectҳои кормандон, мо синф навиштем Employee. Кадом хусусиятҳо барои тавсифи онҳо дар файли ширкат муҳиманд? Номи пурра, санаи таваллуд, рақами амнияти иҷтимоӣ, рақами мушаххаси андоз. Аммо аз эҳтимол дур нест, ки дар як корти ин намуд ба мо қад, чашм ва ранги мӯйи ӯ лозим шавад. Ширкат ба ин маълумот дар бораи корманд ниёз надорад. Аз ин рӯ, барои синф Employeeмо тағирёбандаҳои String name, int age, int socialInsuranceNumberва int taxNumber, -ро муқаррар мекунем ва иттилооти барои мо нодаркор, аз қабor ранги чашмро тарк карда, онро абстракт мекунем. Аммо агар мо феҳристи фотомоделҳоро барои як агентӣ созем, вазъият ба таври куллӣ тағйир меёбад. Барои тавсифи модели мӯд барои мо қад, ранги чашм ва ранги мӯй муҳим аст, аммо рақами ТИН лозим нест. ModelАз ин рӯ, мо дар синф тағирёбандаҳои String height, String hair, -ро эҷод мекунем String eyes.

Принсипи 3: Инкапсуляция

Мо аллакай ба он дучор шудаем. Инкапсуляция дар Java маънои маҳдуд кардани дастрасӣ ба додаҳо ва қобorяти тағир додани онро дорад. Тавре ки шумо мебинед, он ба калимаи "капсула" асос ёфтааст. Дар ин "капсула" мо баъзе маълумоти муҳимро барои худ пинҳон мекунем, ки мо намехоҳем, ки касе тағир ёбад. Як мисоли оддӣ аз ҳаёт. Шумо ном ва насаб доред. Ҳар касе, ки шумо медонед, онҳоро мешиносад. Аммо онҳо имкони иваз кардани ному насабатонро надоранд. Ин раванд, гуфтан мумкин аст, ки дар идораи шиноснома "инкапсулатсия шудааст": шумо метавонед дар он ҷо танҳо ному насабатонро иваз кунед ва танҳо шумо метавонед ин корро кунед. Дигар "истифодабарандагон" ба ному насабатон танҳо барои хондан дастрасӣ доранд :) Мисоли дигар ин пул дар манзor шумост. Дар мобайни ҳуҷра дар пеши назари онҳо гузоштан кори хуб нест. Ҳар як "истифодабаранда" (шахсе, ки ба хонаи шумо меояд) метавонад рақами пули шуморо иваз кунад, яъне. онҳоро бигиред. Беҳтар аст, ки онҳоро дар сейф ҷойгир кунед. Танҳо шумо дастрасӣ пайдо мекунед ва танҳо бо рамзи махсус. Намунаҳои равшани инкапсуляция, ки шумо аллакай бо онҳо кор кардаед, тағирдиҳандаҳои дастрасӣ ( private, publicва ғ.) ва танзимкунандаҳо мебошанд. Агар майдони ageсинф Catинкапсулизатсия нашуда бошад, ҳар кас метавонад нависад:
Cat.age = -1000;
Ва механизми инкапсуляция ба мо имкон медиҳад, ки майдонро ageбо усули танзимкунанда муҳофизат кунем, ки дар он мо метавонем чек гузорем, ки синну сол рақами манфӣ буда наметавонад.

Принсипи 4. Полиморфизм

Полиморфизм ин қобorяти муносибат кардани намудҳои гуногун аст, ки гӯё онҳо як навъ бошанд. Дар ин ҳолат, рафтори an objectҳо вобаста ба намуди онҳо, ки ба он тааллуқ доранд, фарқ мекунад. Як каме мураккаб садо медиҳад? Биёед ҳоло онро муайян кунем. Мисоли оддитарин — хайвонхоро гирем. Биёед синферо Animalбо усули ягона эҷод кунем - voice(), ва ду насли он - Catва Dog.
public class Animal {

   public void voice() {

       System.out.println("Voice!");
   }
}

public class Dog extends Animal {


   @Override
   public void voice() {
       System.out.println("Bow-wow!");
   }
}

public class Cat extends Animal {

   @Override
   public void voice() {
       System.out.println("Meow!");
   }
}
Акнун биёед кӯшиш кунем, ки пайванд эҷод кунем Animalва ба он an object таъин кунем Dog.
public class Main {

   public static void main(String[] args) {

       Animal dog = new Dog();
       dog.voice();
   }
}
Ба фикри шумо кадом усул номида мешавад? Animal.voice()ё Dog.voice()? Усули синф чунин номида мешавад Dog: Woof-woof! Мо истинод эҷод кардем Animal, аммо an object мисли Dog. Агар лозим бошад, ӯ метавонад мисли гурба, асп ё ҳайвони дигар рафтор кунад. Чизи асосӣ ин аст, ки истинод ба навъи умумӣ Animalба an objectи синфи насли мушаххас таъин карда шавад. Ин мантиқист, зеро ҳама сагҳо ҳайвонанд. Вақте ки мо гуфта будем, ин чизеро дар назар доштем, ки "an objectҳо вобаста ба намуди онҳо гуногун рафтор мекунанд." Агар мо an objectеро эҷод мекардем Cat-
public static void main(String[] args) {

   Animal cat = new Cat();
   cat.voice();
}
усул voice()мебарояд "Миёв!" "Қобorяти кор кардан бо якчанд намудҳо, ки гӯё онҳо як навъ буданд" чӣ маъно дорад? Ин ҳам хеле осон аст. Тасаввур кунем, ки мо барои хайвонот сартарошхона ташкил карда истодаем. Салони мӯйҳои мо бояд ҳама ҳайвонотро бурида тавонанд, аз ин рӯ мо усулеро shear()("буридан") бо параметр Animal- ҳайвонеро, ки мо бурида хоҳем кард, эҷод мекунем.
public class AnimalBarbershop {

   public void shear(Animal animal) {

       System.out.println("The haircut is ready!");
   }
}
shearВа акнун мо метавонем ҳам an objectҳо Catва ҳам an objectҳоро ба усул гузаронем Dog!
public static void main(String[] args) {

   Cat cat = new Cat();
   Dog dog = new Dog();

   AnimalBarbershop barbershop = new AnimalBarbershop();

   barbershop.shear(cat);
   barbershop.shear(dog);
}
Ин аст мисоли равшан: синф AnimalBarbershopбо намудҳо кор мекунад Cat, ки Dogгӯё онҳо як навъ бошанд. Дар айни замой онхо рафтори Catгуногун доранд Dog: овози худро ба таври дигар истифода мебаранд.

Сабабҳои пайдоиши OOP

Чаро ин консепсияи нави барномасозӣ - OOP - ҳатто ба вуҷуд омадааст ? Барномасозон асбобҳое доштанд, ки кор мекарданд: масалан, забонҳои мурофиавӣ. Чӣ онҳоро водор кард, ки чизи комилан навро ихтироъ кунанд? Пеш аз хама, мураккабии вазифахое, ки дар назди онхо истода буданд. Агар 60 сол пеш вазифаи барномасоз мисли «ҳисоб кардани муодилаи риёзии фалон ва фалон» ба назар мерасид, ҳоло он метавонад чунин садо диҳад, ки «бо назардошти он, ки корбар дар лаҳзаҳои бозии A, B, C, D чӣ қарор қабул кардааст, барои бозии STALKER 7 охири гуногунро татбиқ кунед. , E, F ва комбинатсияи ин ҳаллиҳо." Вазифахо, чи тавре ки мебинед, дар давоми дахсолахои охир хеле мураккабтар гардиданд. Ин маънои онро дорад, ки намудҳои маълумот мураккабтар шудаанд. Ин боз як сабаби пайдоиши OOP мебошад. Намунаи муодиларо бо ёрии ибтидоии оддӣ ба осонӣ ҳал кардан мумкин аст; дар ин ҷо ягон an object лозим нест. Аммо ҳатто бидуни истифодаи баъзе синфҳои ихтироъкардаи шумо мушкилотро бо охири бозӣ тавсиф кардан душвор хоҳад буд. Аммо дар айни замон, онро дар синфҳо ва an objectҳо тавсиф кардан хеле осон аст: ба мо бешубҳа синфи Game, синфи Stalker, синфи Ending, синфи Қарори Player, синфи Game Moment ва ғайра лозим аст. Яъне, њатто ба њалли масъала шурўъ накунем, мо метавонем ба осонї «эскиз»-и њалли онро дар сари худ тасаввур кунем. Мушкorи афзояндаи масъалаҳо барномасозонро маҷбур кардааст, ки масъаларо ба қисмҳо тақсим кунанд. Аммо дар барномасозии мурофиавӣ ин чандон осон набуд. Ва аксар вақт барнома як "дарахти" як хӯшаи шохаҳо бо тамоми имконоти имконпазири кори он буд. Вобаста ба шароити муайян программа дар баробари ин ё он шоха ичро мешуд. Барои барномаҳои хурд ин вариант қулай буд, аммо ба қисмҳо тақсим кардани вазифаи калон хеле душвор буд. Ин зарурат сабаби дигари пайдоиши OOP гардид. Ин консепсия ба барномасозон имкон дод, ки барномаро ба як даста "модулҳо"-и синфҳо тақсим кунанд, ки ҳар як қисми кори худро иҷро мекард. Хамаи an objectхое, ки бо хамдигар амал мекунанд, кори программаи моро ташкил медиханд. Илова бар ин, codeеро, ки мо менависем, метавонад дар ҷои дигари барнома дубора истифода кард, ки ин ҳам вақти зиёдро сарфа мекунад.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION