JavaRush /Java Blogu /Random-AZ /JAVA Obyektyönümlü Proqramlaşdırma Konseptləri
shabnahm
Səviyyə

JAVA Obyektyönümlü Proqramlaşdırma Konseptləri

Qrupda dərc edilmişdir
JAVA obyekt yönümlü proqramlaşdırma konsepsiyalarına əsaslanır və bu, istənilən problemi real şəkildə həll etmək üçün daha yüksək abstraksiya səviyyəsinə keçməyə imkan verir. Obyekt yönümlü yanaşma problemin həllini tətbiqdə təkrar istifadə etmək asan olan real dünya obyektləri baxımından konseptuallaşdırır. Məsələn, Chair(stul), Fan(yelçəkən), Dog(İt), Computer(kompüter) və s. JAVA-da sinif verilmiş tipli obyektin ümumi davranışını təyin edən tərtibat, şablon və ya prototipdir. Nümunə sinfin ayrıca həyata keçirilməsidir və sinfin bütün nümunələri sinif tərifində təsvir olunan eyni xüsusiyyətlərə malikdir. Məsələn, siz atribut kimi otaqların sayı ilə Ev adlı sinfi təyin edə və iki otaqlı ev, üç otaqlı ev və s. kimi sinif nümunələrini yarada bilərsiniz. JAVA Obyektyönümlü Proqramlaşdırma Konseptləri - 1Üstünlüklər: Aşağıda obyekt yönümlü proqram təminatının inkişafının bəzi üstünlükləri verilmişdir.
  • Əsasən modul şəkildə həyata keçirildiyinə görə proqram təminatına dəstək xərclərinin azaldılması.
  • Vərəsəlik kimi xüsusiyyətlər vasitəsilə təkmilləşdirilmiş kodun təkrar istifadəsi, nəticədə proqram təminatının daha sürətli inkişafı.
  • Artan kodun etibarlılığı və çevikliyi.
  • Real dünya simulyasiyası sayəsində başa düşülmə asanlığı.
  • Obyekt səviyyəsində daha yaxşı abstraksiya.
  • Bir inkişaf mərhələsindən digərinə keçidin mürəkkəbliyini azaltmaq.
OOP-un dörd əsas xüsusiyyəti var:
  • İnkapsulyasiya
  • Miras
  • Polimorfizm
  • Abstraksiya

İnkapsulyasiya

İnkapsulyasiya obyektin nəyi gizlətməli olduğunu və digər obyektlər üçün nəyi açması üçün müqavilə kimi çıxış edir. privateJAVA-da metodu gizlətmək və xarici dünyadan dəyişənə girişi məhdudlaşdırmaq üçün giriş dəyişdiricisindən istifadə edirik . JAVA həmçinin müxtəlif giriş modifikatorlarına malikdir: public, default, protected, private, müxtəlif səviyyələrdə görmə qabiliyyətini məhdudlaşdırmaq üçün istifadə olunur. Ancaq son məqsəd dəyişdirilməməli olan şeyləri əhatə etməkdir. Ən yaxşı işləyən yanaşma ondan ibarətdir ki, sinfin dəyişmək üçün yalnız bir səbəbi olmalıdır və inkapsulyasiya bu “bir səbəbin” dizaynını reallığa çevirir. İnkapsulyasiyaya düzgün yanaşma, digər siniflərə zərər verməmək üçün tez-tez dəyişən şeyləri gizlətməkdir. Faydaları: Aşağıda kapsullaşdırmanın bəzi üstünlükləri verilmişdir:
  • Biz obyektin atributlarını gizlətməklə onun daxili vəziyyətini qoruya bilərik.
  • Bu, kodun modulyarlığını yaxşılaşdırır, çünki obyektlərin gözlənilməz şəkildə qarşılıqlı əlaqəsinin qarşısını alır.
  • Kodun istifadəsini yaxşılaşdırır.
  • Bu, konkret qurumun müqavilə münasibətlərini dəstəkləyir.
  • İnkapsulyasiya proqram təminatının saxlanmasını asanlaşdırır.
  • Koda dəyişikliklər bir-birindən asılı olmayaraq edilə bilər.

Polimorfizm

Proqramlaşdırmada polimorfizm müxtəlif əsas formalar (məlumat növləri) üçün eyni interfeysi təmin etmək qabiliyyətidir. Bu o deməkdir ki, müxtəlif funksionallığı olan siniflər eyni interfeysi paylaşır və parametrləri istinadla ötürməklə dinamik çağırıla bilər. Klassik misal sinif Shape(forma) və ondan irslənən bütün siniflərdir: square(kvadrat), circle(dairə), dodecahedron(dodekaedr), irregular polygon(düzgün olmayan çoxbucaqlı), splat(blob) və s. Bu nümunədə hər bir sinifin öz metodu olacaq Draw()və müştəri kodu sadəcə olaraq edə bilər:
Shape shape = new Shape();
Shape.area()istənilən formanın düzgün davranışını əldə etmək Polimorfizmin gözəlliyi ondadır ki, müxtəlif siniflərlə işləyən kodun hansı sinifdən istifadə etdiyini bilməyə ehtiyac yoxdur, çünki onların hamısı eyni prinsip üzərində işləyir. Dinamik polimorfizmi həyata keçirmək üçün obyekt yönümlü proqramlaşdırma dillərinin istifadə etdiyi proses dinamik bağlama adlanır. Qeyd: Polimorfizm obyektdən asılı olaraq yerinə yetirmək üçün daha konkret üsullar seçmək qabiliyyətidir. Polimorfizm abstrakt siniflər iştirak etmədikdə baş verir. Üstünlüklər:
  • Yenidən istifadə edilə bilən kodun yaradılması. Yəni, bir sinif yaradıldıqdan, həyata keçirildikdən və sınaqdan keçirildikdən sonra, orada dəqiq nə yazılacağından narahat olmadan sərbəst şəkildə istifadə edilə bilər.
  • Bu, daha ümumi və sərbəst şəkildə birləşdirilmiş koda imkan verir.
  • Kompilyasiya vaxtı azalır, bu da inkişafı sürətləndirir.
  • Dinamik əlaqə.
  • Eyni interfeys müxtəlif tətbiqlərlə metodlar yaratmaq üçün istifadə edilə bilər.
  • Bütün icra eyni metod imzalarından istifadə etməklə əvəz edilə bilər.
Polimorfizmin bir hissəsi kimi metodun üstünlüyü. Ləğvetmə iki üsulla qarşılıqlı əlaqədə olur: ana sinifdəki metod və törəmə sinifdəki metod. Bu üsullar eyni ada və imzalara malikdir. Üstündən təyinetmə eyni əməliyyatı müxtəlif növ obyektlər üçün müxtəlif üsullarla yerinə yetirməyə imkan verir. Misal üçün:
while(it.hasNext()) {
Shape s = (Shape) it.next();
totalArea += s.area(dim); //будет применен полиморфизм и вызван нужный метод для каждого an object.
}
JAVA Obyektyönümlü Proqramlaşdırma Konseptləri - 2Metodun həddən artıq yüklənməsi və ya ad-hoc polimorfizmi və ya statik polimorfizmi Həddindən artıq yükləmə eyni adlı, lakin fərqli metod imzalarına malik olan eyni sinifin çoxsaylı metodları ilə qarşılıqlı əlaqə yaradır. Yenidən yükləmə eyni əməliyyatı müxtəlif məlumatlar üçün müxtəlif üsullarla təsvir etməyə imkan verir. Buna bəzən statik polimorfizm deyilir, amma əslində polimorfizm deyil. Bu, sadəcə olaraq eyni adda iki metoda malik olmaqdan başqa bir şey deyil, fərqli arqumentlər siyahısıdır. Yenidən yükləmənin irsiyyət və polimorfizmlə heç bir əlaqəsi yoxdur. Və həddən artıq yüklənmiş metod heç də ləğv edilmiş metodla eyni deyil. JAVA-da Generasiya vasitəsilə Parametrik Polimorfizm Sinif elan edərkən ad sahəsi müxtəlif tiplərlə, metod adı isə müxtəlif parametrlər və qaytarma növləri ilə əlaqələndirilə bilər. JAVA generiklərdən istifadə edərək parametrik polimorfizmi dəstəkləyir.
List<String> list = new ArrayList<String>();
Niyə biz JAVA-da statik metodu ləğv edə bilmirik? Üstündən təyin edilməsi sinif nümunəsinin mövcudluğundan asılıdır. Polimorfizm ideyası ondan ibarətdir ki, siz bir alt sinif yarada bilərsiniz və bu alt siniflər tərəfindən həyata keçirilən obyektlər ana sinifin eyni metodları ilə fərqli davranacaqlar (alt siniflərdə ləğv edilir). Statik metod sinfin heç bir nümunəsi ilə əlaqələndirilmir, ona görə də üstün təyinetmə konsepsiyası tətbiq edilə bilməz. JAVA-nın yaradıcıları bu yanaşmaya təsir edən iki mülahizəni rəhbər tutmuşlar. Birincisi, kodun icrası ilə bağlı problemlər var: Smalltalk-ın yavaş olduğuna görə çoxlu tənqidlər var idi (zibil toplama və polimorfizm bu problemin bir hissəsi idi) və JAVA bunun qarşısını almaq üçün hazırlanmışdır. İkinci mülahizə JAVA-nın hədəf auditoriyasının C++ tərtibatçıları olacağı qərarı idi. Statik metodların bu şəkildə işləməsi C++ proqramçılarına çox tanış idi və eyni zamanda işi sürətləndirirdi, çünki hansı metodun çağırılacağını anlamaq üçün sinif iyerarxiyasına qalxmağa ehtiyac yox idi. Birbaşa sinifə gedirsən və müəyyən bir üsul çağırırsan.

Miras

Varislik, əsas sinfin davranışını (yəni üsulları) və vəziyyətini (yəni dəyişənləri) törəmə sinfə daxil etmək aktıdır ki, onlar həmin törəmə sinifdə mövcud olsunlar. Vərəsəliyin əsas üstünlüyü ondan ibarətdir ki, o, kodun təkrar istifadəsi üçün formal mexanizm təmin edir və təkrarlanmanın qarşısını alır. Miras alınan sinif, ana sinifin davranışını kopyalayaraq və yeni funksionallıq əlavə etməklə tətbiqin funksionallığını genişləndirir. Bu, kodu yüksək dərəcədə əlaqələndirir. Əgər supersinifi dəyişmək istəyirsinizsə, kodu pozmamaq üçün alt siniflərin bütün detallarını bilməli olacaqsınız. Varislik, funksionallığını genişləndirən və supersinifin bəzi xassələrindən istifadə edən mövcud sinifdən (supersinifdən) yeni sinifin (alt sinif) yaradıldığı proqram təminatının təkrar istifadəsi formasıdır. Beləliklə, əgər valideyn sinifiniz varsa və sonra uşaq sinfi görünürsə, uşaq valideynin sahib olduğu hər şeyi miras alır. Üstünlüklər:
  • Təkmilləşdirilmiş kodun təkrar istifadəsi.
  • Məntiqi münasibət “adır” (kimsədir, nə isə) qurulur. Məsələn : İt n heyvandır . (İt bir heyvandır).
  • Kodun modullaşdırılması.
  • Təkrarlar istisna olunur.
Qüsur:
  • Sıx birləşdirilmiş: Alt sinif, kodu sıx şəkildə birləşdirərək, ana sinifin tətbiqindən asılıdır.
Başqa nə oxumaq lazımdır:

Java Tərtibatçı Qrupu:

Abstraksiya

Abstraksiya, həyata keçirmə təfərrüatlarını nəzərə almadan, onların interfeysləri və funksionallığı əsasında siniflərin layihələndirilməsi deməkdir. Mücərrəd sinif faktiki icra daxil edilmədən interfeysləri təmsil edir. O, obyektin həyata keçirilməsini onun davranışından fərqləndirir. Abstraksiya əhəmiyyətsiz detalları gizlətməklə kodu sadələşdirir. Üstünlüklər:
  • Abstraksiyadan istifadə edərək, hansı növə qruplaşdırıla biləcəyini ayıra bilərik.
  • Tez-tez dəyişən xüsusiyyətlər və üsullar ayrıca bir növdə qruplaşdırıla bilər ki, əsas tip dəyişikliklərə məruz qalmasın. Bu, OOP prinsipini gücləndirir: "Kod Genişləndirməyə açıq, lakin Dəyişiklik üçün qapalı olmalıdır . "
  • Abstraksiya domen modellərinin təsvirini asanlaşdırır.
Abstraksiya və enkapsulyasiya arasındakı fərq Enkapsulyasiya abstraksiyanın bir hissəsi kimi istifadə olunan strategiyadır. İnkapsulyasiya obyektin strukturuna aiddir: obyektlər öz xassələrini əhatə edir və onları kənar girişdən gizlədir. Bir sinfin istifadəçiləri onun metodlarından istifadə edərək onunla qarşılıqlı əlaqədə olurlar, lakin sinif strukturuna birbaşa çıxışı yoxdur. Bu şəkildə, sinif dizaynı ilə bağlı icra detallarını mücərrəd edir. Abstraksiya daha ümumi bir termindir. Buna, digər şeylər arasında, alt siniflərdən istifadə etməklə də nail olmaq olar. Məsələn, Liststandart kitabxanadakı sinif (siyahı) siyahıdakı yerinə görə indeksləşdirilmiş elementlər ardıcıllığı üçün abstraksiyadır. Siyahının xüsusi nümunələri ListArrayListya LinkedList. Siyahı ilə qarşılıqlı əlaqədə olan kod Lististifadə etdiyi siyahının təfərrüatlarını mücərrədləşdirir. Çox vaxt inkapsulyasiyadan istifadə edərək əsas vəziyyəti gizlətmədən abstraksiya mümkün deyil. Sinif öz daxili quruluşunu ifşa edərsə, daxili əməliyyatlarını dəyişə bilməz və buna görə də mücərrədləşdirilə bilməz. Abstrakt sinif və mücərrəd metod nədir? Belə olur ki, inkişaf zamanı siz baza sinifinin yalnız onun törəmə siniflərinə interfeys təqdim etməsini istəyirsiniz. Yəni heç kimin əsas sinfin nümunələrini yaratmasını istəmirsiniz. İnterfeysdən elə istifadə etməlisiniz ki, ona yalnız obyektlər göndərəsiniz (bu, polimorfik davranışa imkan verən gizli castdır). Bu, açar sözdən istifadə edərək bu sinfi mücərrəd etməklə əldə edilir abstract. Bu, mücərrəd sinif nümunələrinin yaradılmasının mümkünsüzlüyü kimi bəzi məhdudiyyətlər qoyur; mücərrəd sinifdən istifadə edərkən mücərrəd metodları tətbiq etmək lazımdır. Bu, polimorfizmi təmin edir. Mücərrəd sinif həm abstrakt, həm də konkret metodlardan ibarət ola bilər. Bir sinifdə ən azı bir metod mücərrəd elan edilirsə, bütün sinif də abstrakt elan edilməlidir. Ancaq əks istiqamətdə olan qaydaya riayət etmək lazım deyil. Əgər sinif mücərrəd elan edilibsə, o, abstrakt metodları ehtiva etməyə bilər. Sadəcə imzalarını müəyyən edən və həyata keçirilməsini təmin etməyən metod abstrakt adlanır. Onun faktiki icrası mücərrəd sinfi genişləndirən alt siniflərinə qalır. Mücərrəd metod obyekt tərəfindən istifadə edilə bilməz, yalnız başqa bir sinif onu genişləndirə bilər. Nə vaxt abstrakt sinifdən istifadə etməlisiniz? Mücərrəd siniflər bəzi standart davranışları müəyyən etməyə imkan verir və alt siniflər hər hansı bir xüsusi davranış təmin edir. Məsələn: List(siyahı) interfeysdir, öz növbəsində AbstractListSiyahının əsas davranışını müəyyən edir, ondan olduğu kimi istifadə oluna bilər və ya alt sinifdə, məsələn, ArrayList(siyahı massivində) dəqiqləşdirilə bilər. İnterfeys nədir? İnterfeys anlayışı mücərrəd sinifdir, lakin interfeys (açar sözü ilə müəyyən edilir interface) bir addım irəli gedir. O, ümumiyyətlə bir metodun və ya funksiyanın həyata keçirilməsinin qarşısını alır. Siz yalnız metod və ya funksiyanı elan edə bilərsiniz, lakin onun həyata keçirilməsini təmin edə bilməzsiniz. İnterfeys həyata keçirən sinif faktiki icraya diqqət yetirməlidir. İnterfeyslər çox faydalıdır və OOP-də geniş istifadə olunur. Onlar interfeysin özünü və tətbiqini paylaşdıqları üçün istifadənin bir çox üstünlüklərini təmin edirlər:
  1. Çoxsaylı miras .
  2. Boş birləşmə . Qatlama kimi əməliyyatın abstraksiyası var və konkret icra hər hansı bir şey ola bilər: JDBC, JPA, JTA və s.
  3. İnterfeys proqramı həyata keçirilməyib .
  4. Dinamik bağlama polimorfizmi : Obyektin proqramlaşdırma interfeysi onun real icrasını aşkar etmədən ifşa olunur.
  5. Abstrakt səviyyələr , funksionallığın ayrılması.
İnterfeys və abstrakt sinif arasındakı fərq.
  • İnterfeys bu interfeysi həyata keçirən siniflərlə müqavilə əlaqəsidir və tətbiqin interfeys tərəfindən təyin olunmuş şəkildə baş verdiyini bildirir. Bu elan edilmiş üsulları olan boş bir qabıqdır.
  • Mücərrəd sinif bəzi ümumi davranışları müəyyənləşdirir və alt siniflərindən öz sinfi üçün atipik və ya xüsusi davranışı müəyyən etməyi xahiş edir.
  • Mücərrəd sinifin metodları və üzvləri istənilən giriş modifikatoru ilə təyin oluna bilər, öz növbəsində bütün interfeys metodları ictimai olmalıdır.
  • Mücərrəd sinfi miras alarkən, nəsil sinfi mücərrəd metodları müəyyən etməlidir, interfeys isə mütləq metodlarını müəyyən etmədən başqa interfeysi miras ala bilər.
  • Nəsil sinfi yalnız bir mücərrəd sinfi genişləndirə bilər, lakin bir interfeys genişləndirə bilər və ya bir sinif bir çox digər interfeysləri həyata keçirə bilər.
  • Nəsil sinfi eyni və ya daha az məhdudlaşdırıcı giriş modifikatoru ilə mücərrəd metodları müəyyən edə bilər, lakin interfeysi həyata keçirən sinif eyni səviyyəli görünmə ilə metodları müəyyən etməlidir.
  • İnterfeysdə konstruktorlar yoxdur, abstrakt sinifdə isə var.
  • Java interfeysində elan edilmiş dəyişənlər defolt olaraq yekundur. Mücərrəd sinif son olmayan dəyişənləri ehtiva edə bilər.
  • Java interfeysinin bütün üzvləri public. Mücərrəd sinfin üzvləri ola bilər publicprotecteds.

Tərkibi

Kodun təkrar istifadəsi həm miras, həm də tərkibdən istifadə etməklə əldə edilə bilər. Lakin kompozisiyadan istifadə mirasdan daha yüksək səviyyəli inkapsulyasiya təmin edir, çünki back-end sinifinə edilən dəyişikliklər mütləq front-end sinfinə aid olan koda təsir etməyəcək. Kompozisiya siniflərdə “has-a” (var, daxildir) münasibətlərindən istifadə edən dizayn texnikasıdır. Kodun təkrar istifadəsi üçün həm java irsi, həm də obyekt tərkibi istifadə edilə bilər. Kompozisiyanın mahiyyəti cisimlər arasında “var” əlaqəsini ifadə etməkdir. Kreslo haqqında düşünün. Kresloda oturacaq var. Kreslonun arxası var. Kresloda müəyyən sayda ayaq var. “A var” ifadəsi kafedranın başqa obyektə malik olduğu və ya heç olmasa istifadə etdiyi əlaqəni nəzərdə tutur. Bu, kompozisiyanın əsasını təşkil edən "var-a" əlaqəsidir. Üstünlüklər:
  • Görünüşə nəzarət
  • Tətbiq iş vaxtında dəyişdirilə bilər
  • Boş birləşmə, çünki interfeys sinfi tətbiqdən asılı deyil.
Tərkib və irsiyyət arasındakı fərqlər
Yox. Tərkibi (var / var) Vərəsəlik (a / edir)
1 Polimorfizmi və kodun təkrar istifadəsini dəstəkləyir. Polimorfizmi və kodun təkrar istifadəsini dəstəkləyir.
2 İş vaxtı obyekti artıq yaradılmışdır. Obyekt kompilyasiya zamanı dinamik şəkildə yaradılır.
3 Tətbiq iş vaxtında dəyişdirilə bilər. Tətbiq kompilyasiya zamanı dəyişdirilə bilər.
4 Alt sinif, boş birləşməyə üstünlük verən ana sinifindən müstəqildir (xüsusilə interfeys nəzarəti altında). Alt sinif ana sinfin həyata keçirilməsindən asılıdır, ona görə də bağlama güclü hesab olunur.
5 İstifadəsi: Evdə hamam var. Evin hamam olduğunu söyləmək düzgün deyil. Miras bir istiqamətlidir: Ev bir Binadır. Amma bina ev deyil.
Qeyd: Yalnız kodun təkrar istifadəsini təmin etmək üçün mirasdan istifadə etməyin. Əgər “birdir” (dir) əlaqəsi yoxdursa, bu məqsədlər üçün kompozisiya istifadə olunur. Kompozisiya ilə aqreqasiya arasındakı fərq obyekt münasibətlərindədir. Aqreqasiya bir sinfin kolleksiyaya uyğunlaşdığı əlaqədir. Bu, bütöv bir əlaqənin bir hissəsidir, burada bir hissə tam olmadan mövcud ola bilər. Belə əlaqələr daha zəifdir. Siklik asılılıq yoxdur. Məsələn: sifariş və məhsul. Kompozisiya bir sinfin kolleksiyaya uyğunlaşdığı əlaqədir. O, bütöv əlaqənin bir hissəsidir ki, orada hissə bütöv olmadan mövcud ola bilməz. Bütöv məhv olarsa, onun bütün komponentləri də məhv olar. Daha güclü bir əlaqədir. Məsələn: çoxbucaqlı və onun təpələri, nizam və onun komponenti.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION