JavaRush /Java Blog /Random-TK /OOP ýörelgeleri

OOP ýörelgeleri

Toparda çap edildi
Java obýekte gönükdirilen dil. Diýmek, obýekte gönükdirilen stil ulanyp, Java programmalaryny ýazmaly. Bu stil programmada obýektleriň we synplaryň ulanylmagyna esaslanýar.

OOP-yň esasy ýörelgeleri:

OOP ýörelgeleri - 1Mysallaryň kömegi bilen, synplaryň we obýektleriň nämedigini, şeýle hem OOP-nyň esasy ýörelgelerini iş ýüzünde nähili ulanmalydygyna düşünmäge synanyşalyň: abstraksiýa, miras, polimorfizm we encapsulation.

Obýekt näme?

Weaşaýan dünýämiz jisimlerden durýar. Daş töweregimize göz aýlasak, daş-töweregimizi jaýlar, agaçlar, awtoulaglar, mebel, gap-gaçlar, kompýuterler gurşap alandygyny göreris. Bu zatlaryň hemmesi obýektler bolup, olaryň hersinde aýratyn aýratynlyklar, özüni alyp barş we maksat bar. Obýektlere öwrenişdik we elmydama gaty anyk maksatlar üçin ulanýarys. Mysal üçin, işe girmeli bolsak, maşyn ulanýarys, iýmek islesek, gap-gaç ulanýarys, dynç almaly bolsa, rahat divan gerek. Adam gündelik durmuşdaky meseleleri çözmek üçin obýektiw pikirlenmäge öwrenişdi. Bu obýektleri programmirlemekde ulanmagyň sebäplerinden biri bolup, programmalary döretmäge bu çemeleşme obýekte gönükdirilen diýilýärdi. Mysal getireliň. Täze telefon modelini döredendigiňizi we köpçülikleýin önümçiligine başlamak isleýändigiňizi göz öňüne getiriň. Telefon dizaýneri hökmünde onuň nämedigini, nähili işlejekdigini we haýsy böleklerden ybaratdygyny bilýärsiňiz (korpus, mikrofon, gürleýji, simler, düwmeler we ş.m.). Şeýle-de bolsa, bu bölekleri nädip birikdirmelidigini diňe bilýärsiňiz. Şeýle-de bolsa, siz telefon öndürmegi meýilleşdirmeýärsiňiz, munuň üçin işgärleriň tutuş bir topary bar. Her gezek telefonyň böleklerini nädip birikdirmelidigini düşündirmek hökman däl we önümçilikdäki ähli telefonlaryň birmeňzeş çykmagy üçin, öndürip başlamazdan ozal a görnüşinde çyzgy çekmeli bolarsyňyz. telefonyň gurluşynyň beýany. OOP-da şeýle düşündiriş, çyzgy, diagramma ýa-da şablon programma ýerine ýetirilende obýekt döredilýän synp diýilýär. Synp, meýdanlardan, usullardan we konstruktordan ybarat umumy şablon ýaly entek döredilmedik obýektiň beýanydyr we obýekt bu düşündiriş esasynda döredilen synpyň mysalydyr.

OOP abstraksiýasy

Geliň, indi telefony mysal hökmünde ulanyp, hakyky dünýädäki bir obýektden programmadaky bir obýekte nädip geçip biljekdigimiz hakda pikir edeliň. Bu aragatnaşyk serişdesiniň taryhy 100 ýyldan geçýär we häzirki zaman telefon, XIX asyrdan ozalkylardan tapawutlylykda has çylşyrymly enjam. Telefon ulananymyzda, onuň gurluşy we içindäki hadysalar hakda pikir etmeris. Telefony döredijiler tarapyndan üpjün edilen funksiýalary - san saýlamak we jaň etmek üçin düwmeler ýa-da duýgur ekran ulanýarys. Ilkinji telefon interfeýslerinden biri, jaň etmek üçin öwrülen düwme. Elbetde, bu gaty amatly däldi. Muňa garamazdan, tutawaç öz işini dogry ýerine ýetirdi. Iň döwrebap we ilkinji telefona seretseňiz, XIX asyryň ahyryndaky enjam üçin hem, aşa döwrebap smartfon üçinem möhüm bolan iň möhüm jikme-jiklikleri derrew kesgitläp bilersiňiz. Bu jaň edýär (belgä jaň edýär) we jaň alýar. Aslynda, telefony başga bir zat däl-de, telefon edýär. Indi prinsipi OOP-da ulanýarys - bir obýekt hakda iň möhüm aýratynlyklary we maglumatlary görkezýäris. OOP-yň bu ýörelgesine abstraksiýa diýilýär. OOP-daky abstraksiýa, real dünýädäki meseläniň elementlerini programmadaky obýektler hökmünde görkezmegiň usuly hökmünde hem kesgitlenip bilner. Abstraksiýa elmydama obýektleriň ýa-da obýektleriň häsiýetleri baradaky käbir maglumatlaryň umumylaşdyrylmagy bilen baglanyşyklydyr, şonuň üçin esasy zat çözülýän kontekstde möhüm maglumatlary ähmiýetsiz maglumatlardan aýyrmakdyr. Bu ýagdaýda abstraksiýanyň birnäçe derejesi bolup biler. Abstraksiýa ýörelgesini telefonlarymyza ulanmaga synanyşalyň. Ilki bilen, ilkinji günlerden şu güne çenli iň köp ýaýran telefon görnüşlerini belläliň. Mysal üçin, 1-nji suratda görkezilen diagramma görnüşinde görkezilip bilner. OOP ýörelgeleri - 2Indi abstraksiýanyň kömegi bilen obýektleriň bu iýerarhiýasynda umumy maglumatlary belläp bileris: obýektleriň umumy abstrakt görnüşi - telefon, umumy häsiýetnama telefon - döredilen ýyly we umumy interfeýs - ähli telefonlar jaňlary kabul etmäge we ibermäge ukyply. Java-da nähili görünýär:
public abstract class AbstractPhone {
    private int year;

    public AbstractPhone(int year) {
        this.year = year;
    }
    public abstract void call(int outputNumber);
    public abstract void ring (int inputNumber);
}
Bu abstrakt synpyň esasynda, aşakda seredip geçjek beýleki esasy Java OOP ýörelgelerini ulanyp, programmada täze görnüşli telefonlar döredip bileris.

Enkapsulýasiýa

Abstraksiýanyň kömegi bilen ähli obýektlere umumy bolan zady belläris. Şeýle-de bolsa, her bir telefon modeli aýratyn we beýlekilerden birneme tapawutlanýar. Programmada serhetleri nädip çekip bileris we bu aýratynlygy nädip kesgitläp bileris? Ulanyjylaryň hiç biriniň tötänleýin ýa-da bilkastlaýyn telefonymyzy döwüp bilmejekdigine ýa-da bir modeli beýlekisine öwürmäge nädip göz ýetirip bileris? Hakyky obýektler dünýäsi üçin jogap aç-açan: ähli bölekleri telefon korpusyna salmaly. Galyberse-de, muny etmesek we telefonyň ähli iç taraplaryny we olary birleşdirýän simleri daşarda goýmasak, hökman telefonymyzyň işleýşini “gowulaşdyrmak” isleýän gözlegçi synag geçirer. Obýektiň dizaýnyna we işleýşine şeýle päsgelçilikleriň öňüni almak üçin, OOP encapsulation prinsipini ulanýar - OOP-nyň başga bir esasy ýörelgesi, obýektiň häsiýetleri we özüni alyp barşy bir synpda birleşdirilende, obýektiň içerki durmuşa geçirilmegi gizlenýär; ulanyjy we obýekt bilen işlemek üçin açyk interfeýs üpjün edilýär. Programmistiň işi, haýsy atributlaryň we usullaryň köpçülige elýeterli boljakdygyny we haýsy obýektiň içerki durmuşa geçirilýändigini we üýtgedilmeli däldigini kesgitlemekdir.

Enkapsulýasiýa we giriş gözegçiligi

Önümçilik wagtynda telefonyň arka ýüzüne: öndürilen ýyly ýa-da öndürijiniň kompaniýasynyň nyşany ýazylýar diýeliň. Bu maglumatlar bu modeli - ýagdaýyny aýratyn häsiýetlendirýär. Telefon döredijiniň bu maglumatlaryň üýtgemezligi barada alada edendigini aýdyp bileris - bu ýazgyny aýyrmak barada hiç kimiň pikir etmegi mümkin däl. Java dünýäsinde geljekdäki obýektleriň ýagdaýy meýdanlary ulanýan synpda, özüni alyp barşy usullar bilen beýan edilýär. Döwleti we özüni alyp barşyny üýtgetmek ukyby, meýdanlara we usullara - ,, we (deslapky giriş) giriş üýtgeýjilerini ulanmak arkaly privateamala aşyrylýar . Mysal üçin, döredilen ýyly, telefon öndürijisiniň ady we usullaryň biri synpyň içerki durmuşa geçirilmegine degişlidir we programmadaky beýleki zatlar tarapyndan üýtgedilip bilinmez. Kod ulanyp, synpy şeýle suratlandyryp bolar: protectedpublicdefault
public class SomePhone {

    private int year;
    private String company;
    public SomePhone(int year, String company) {
        this.year = year;
        this.company = company;
    }
private void openConnection(){
    //findComutator
    //openNewConnection...
}
public void call() {
    openConnection();
    System.out.println("I'm calling a number");
}

public void ring() {
    System.out.println("Дзынь-дзынь");
}

 }
Üýtgediji privatesynpyň meýdanlaryny we usullaryny diňe şol synpyň içinde elýeterli edýär. Bu privatemeýdanlara daşyndan girip bolmaýandygyny ýa-da privateusullara çagyryp bolmaýandygyny aňladýar. Bir usula elýeterliligi gizlemek, openConnectionbu usulyň içerki durmuşa geçirilişini erkin üýtgetmäge mümkinçilik döredýär, sebäbi bu usul beýleki obýektler tarapyndan ulanylmazlygy kepillendirilýär we olaryň işini bozmaz. Obýektimiz bilen işlemek üçin modifikatory callulanyp usullary açyk goýýarys . Bir obýekt bilen işlemek üçin köpçülikleýin usullary üpjün etmek hem encapsulation mehanizminiň bir bölegidir, sebäbi bir obýekte girmek düýbünden inkär edilse, peýdasyz bolar.ringpublic

Miras

Telefon diagrammasyna ýene bir gezek seredeliň. Aşakda ýerleşýän modeliň, şahada has ýokary ýerde ýerleşýän modelleriň ähli aýratynlyklaryna eýe bolan iýerarhiýany aňladýandygyny görüp bilersiňiz. Mysal üçin, smartfon aragatnaşyk üçin öýjükli ulgamy ulanýar (öýjükli telefonyň häsiýetleri bar), simsiz we ykjam (simsiz telefonyň häsiýetleri bar) we jaňlary kabul edip we edip bilýär (telefonyň häsiýetleri bar). Bu ýagdaýda obýekt häsiýetleriniň mirasy barada gürleşip bileris. Programmirlemekde miras, täzelerini kesgitlemek üçin bar bolan synplary ulanmakdyr. Miras ulanyp, smartfon synpyny döretmegiň mysalyna seredeliň. Cordhli simsiz telefonlar birnäçe sagadyň dowamynda belli bir işleýiş möhleti bolan zarýad berilýän batareýalar bilen üpjün edilýär. Geliň, bu emlägi simsiz telefonlar synpyna goşalyň:
public abstract class WirelessPhone extends AbstractPhone {

    private int hour;

    public WirelessPhone(int year, int hour) {
        super(year);
        this.hour = hour;
    }
    }
Jübi telefonlary simsiz telefonyň aýratynlyklaryny miras alýar, biz bu synpa callwe usullaryň ýerine ýetirilişini hem goşduk ring:
public class CellPhone extends WirelessPhone {
    public CellPhone(int year, int hour) {
        super(year, hour);
    }

    @Override
    public void call(int outputNumber) {
        System.out.println("Calling a number" + outputNumber);
    }

    @Override
    public void ring(int inputNumber) {
        System.out.println("A subscriber is calling you" + inputNumber);
    }
}
Netijede, nusgawy jübi telefonlaryndan tapawutlylykda, doly hukukly operasiýa ulgamy bolan smartfon synpy. Bu operasiýa ulgamy tarapyndan goldanýan täze programmalary smartfonyňyza goşup bilersiňiz, şeýlelik bilen onuň işleýşini giňeldip bilersiňiz. Kod ulanyp, synpy şeýle suratlandyryp bolar:
public class Smartphone extends CellPhone {

    private String operationSystem;

    public Smartphone(int year, int hour, String operationSystem) {
        super(year, hour);
        this.operationSystem = operationSystem;
    }
public void install(String program){
    System.out.println("Installing" + program + "For" + operationSystem);
}

}
Görşüňiz ýaly, Smartphonesynpy suratlandyrmak üçin gaty az täze kod döretdik, ýöne täze funksiýaly täze synp aldyk. OOP miras ýörelgesini ulanmak koduň mukdaryny ep-esli azaldyp biler we şonuň üçin programmistiň işini aňsatlaşdyrar.

Polimorfizm

Phonehli telefon modellerine göz aýlasak, modelleriň daşky görnüşiniň we dizaýnynyň tapawudyna garamazdan, içindäki käbir umumy häsiýetleri kesgitläp bileris - hemmesi jaň edip biler we jaň edip biler we ýeterlik açyk we ýönekeý dolandyryş düwmelerine eýe bolup biler. OOP-yň esasy ýörelgelerinden birini, eýýäm bize mälim bolan programmirleme manysynda abstraksiýany ulanmak bilen, telefon obýektiniň bir umumy interfeýsi bar diýip bileris. Şol sebäpli, telefon ulanyjylary enjamyň tehniki jikme-jikliklerine girmezden, şol bir dolandyryş düwmelerini (mehaniki ýa-da el degirmek) ulanyp, dürli modelleri rahat ulanyp bilerler. Şeýlelik bilen, elmydama jübi telefonyny ulanýarsyňyz we ýerdäki kärdeşinden aňsatlyk bilen jaň edip bilersiňiz. Haçan-da bir programma obýektiň içki gurluşy barada maglumat almazdan şol bir interfeýsli obýektleri ulanyp bilýän bolsa, OOP prinsipine polimorfizm diýilýär . Geliň, programmamyzda başga bir ulanyja jaň etmek üçin islendik telefon modelini ulanyp bilýän ulanyjyny suratlandyrmalydygymyzy göz öňüne getireliň. Muny nädip etmeli:
public class User {
    private String name;

    public User(String name) {
        this.name = name;
            }

    public void callAnotherUser(int number, AbstractPhone phone){
// here it is polymorphism - using the abstract type AbstractPhone phone in the code!
        phone.call(number);
    }
}
 }
Indi dürli telefon modellerini suratlandyralyň. Ilkinji telefon modellerinden biri:
public class ThomasEdisonPhone extends AbstractPhone {

public ThomasEdisonPhone(int year) {
    super(year);
}
    @Override
    public void call(int outputNumber) {
        System.out.println("Turn the Handle");
        System.out.println("Give me the phone number, sir");
    }

    @Override
    public void ring(int inputNumber) {
        System.out.println("Phone calls");
    }
}
Adaty telefon belgisi:
public class Phone extends AbstractPhone {

    public Phone(int year) {
        super(year);
    }

    @Override
    public void call(int outputNumber) {
        System.out.println("I'm calling a number" + outputNumber);
    }

    @Override
    public void ring(int inputNumber) {
        System.out.println("Phone calls");
    }
}
Netijede, ajaýyp wideo telefon:
public class VideoPhone extends AbstractPhone {

    public VideoPhone(int year) {
        super(year);
    }
    @Override
    public void call(int outputNumber) {
        System.out.println("I connect a video channel for the subscriber" + outputNumber );
    }
    @Override
    public void ring(int inputNumber) {
        System.out.println("You have an incoming video call..." + inputNumber);
    }
  }
Usulda obýektler döredeliň main()we usuly synap göreliň callAnotherUser:
AbstractPhone firstPhone = new ThomasEdisonPhone(1879);
AbstractPhone phone = new Phone(1984);
AbstractPhone videoPhone=new VideoPhone(2018);
User user = new User("Andrey");
user.callAnotherUser(224466,firstPhone);
// Rotate the knob
// Tell me the number of the subscriber, sir
user.callAnotherUser(224466,phone);
//Call number 224466
user.callAnotherUser(224466,videoPhone);
//I connect the video channel for subscriber 224466
Obýektde şol bir usuly çagyryp user, dürli netijeleri aldyk. callUsulyň içinde belli bir usuly durmuşa geçirmek, callAnotherUserprogramma ýerine ýetirilende çagyryş obýektiniň aýratyn görnüşine esaslanyp dinamiki ýagdaýda geçirildi. Bu polimorfizmiň esasy artykmaçlygy - programmanyň ýerine ýetirilişinde durmuşa geçirmegi saýlamakdyr. Aboveokardaky telefon synpynyň mysallarynda usulyň goluny üýtgetmän esasy synpda kesgitlenen usulyň ýerine ýetirilişini üýtgedýän usuldan artykmaç usuly ulanýardyk. Bu, esasan, usuly çalyşmak we programma işledilende çagyrylýan kiçi klasda kesgitlenen täze usul. @OverrideAdatça, bir usuly ýok edende, düzüjä artykmaç we artykmaç usullaryň gollaryny barlamagy tabşyrýan düşündiriş ulanylýar . Netijede , programmaňyzyň stiliniň OOP düşünjesine we OOP java ýörelgelerine laýyk gelmegini üpjün etmek üçin şu maslahatlara eýeriň:
  • obýektiň esasy aýratynlyklaryny görkezmek;
  • umumy häsiýetleri we özüni alyp barşyny görkezmek we obýektler döredilende mirasy ulanmak;
  • obýektleri suratlandyrmak üçin abstrakt görnüşleri ulanyň;
  • Synpyň içerki durmuşa geçirilmegi bilen baglanyşykly usullary we meýdanlary elmydama gizlemäge synanyşyň.
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION