Istraživanje generalizacije, specijalizacije i ovisnosti u OOP-u

OOP (objektno orijentirano programiranje) je paradigma koja je usredotočena na objekte i podatke, a ne na akcije i logiku. Kada radite s OOP-om, neophodno je identificirati predmete i njihove odnose.

U OOP-u se problem raščlanjuje na brojne predmete i njihov međusobni odnos - postupak poznat kao modeliranje podataka. Bitni odnosi između predmeta uključuju: udruživanje, generaliziranje, specijalizaciju, agregaciju, ovisnost i sastav. U ovom ćemo članku raspraviti o odnosima ovisnosti i nasljeđivanja u OOP-u s primjerima koda u C # da bismo ilustrirali koncepte.

Ovisnost

Ovisnost je odnos između dva ili više objekata u kojem objekt ovisi o drugom objektu ili objektima za njegovu provedbu. Ako se jedan od ovih objekata promijeni, to može utjecati na drugi objekt (e). Odnos ovisnosti između dva ili više objekata prikazan je u UML-u pomoću isprekidanih strelica. Drugim riječima, kada postoji odnos ovisnosti između dva ili više objekata, objekt mora znati o drugim objektima o kojima ovisi.

Razmotrite klase BlogEntry i View. Iako prva sadrži sve povezane informacije povezane s unosima bloga, druga se bavi prikazivanjem podataka primljenih iz klase BlogEntry na korisničko sučelje. Dakle, klasa View ovisi o klasi BlogEntry za prikaz sadržaja (unosa na blogu) u korisničkom sučelju. Stoga postoji odnos ovisnosti između klasa View i BlogEntry. Odnos ovisnosti predstavljen je u UML-u pomoću isprekidane strelice.

public class BlogEntry

    {

        //Members of the BlogEntry class

    }

public class View

    {

        //Members of the View class

    }

Generalizacija i specijalizacija

Generalizacija se može definirati kao tehnika izdvajanja bitnih karakteristika (uključuju atribute, svojstva i metode) iz dvije ili više potklasa, a zatim kombiniranjem u okviru generalizirane osnovne klase (koja se naziva i superklasa). Suprotno tome, specijalizacija je obrnuta od generalizacije - koristi se za predstavljanje odnosa "tipa" stvaranjem potklasa od postojećih osnovnih klasa.

Nasljeđivanje se definira kao sposobnost klase da proširi jednu ili više klasa (poznatih i kao osnovne klase). Imajte na umu da je generalizacija najjači oblik odnosa u razredu jer su razredi koji sudjeluju u generalizaciji međusobno povezani - većina internih zamršenosti roditeljske klase vidljiva je za klasu dijete.

Klasa koja proširuje osnovnu ili roditeljsku klasu poznata je i kao podređena klasa ili izvedena klasa. Naslijeđena ili generalizirana klasa proširuje ili nasljeđuje svoju osnovnu ili roditeljsku klasu. U nasljeđivanju, podređena klasa nasljeđuje metode i atribute osnovne ili roditeljske klase, osim onih koje su privatne. U osnovi, privatni članovi osnovne klase ne nasljeđuju se jer pripadaju "isključivo" klasi kojoj su dio. Stoga biste trebali iskoristiti generalizaciju samo kada trebate predstavljati klasu koja je zapravo specijaliziraniji oblik druge klase.

Nasljeđivanje je sljedećih vrsta:

  • Singl
  • Višestruko
  • Više razina
  • Hijerarhijski
  • Hibrid

Jedno nasljeđivanje je najjednostavniji oblik nasljeđivanja u kojem jedna klasa proširuje drugu klasu. Sljedeći isječak koda ilustrira ovaj oblik nasljeđivanja - imajte na umu kako klasa BlogAuthor proširuje klasu Author.

public class Author

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

U višestrukom nasljeđivanju imate više osnovnih klasa iz kojih je izvedena klasa. Imajte na umu da višestruko nasljeđivanje nije podržano u OOP programskim jezicima kao što su Java ili C #.

Sljedeća vrsta nasljeđivanja na našem popisu je nasljeđivanje na više razina. U ovom obliku nasljeđivanja imate klase naslijeđene jedna od druge da biste stvorili lanac. Sljedeći isječak koda to ilustrira.

public class Person

    {

        //Members of the Person class

    }

public class Author : Person

    {

        //Members of the Author class

    }

public class BlogAuthor : Author

    {

        //Members of the BlogAuthor class

    }

U hijerarhijskom nasljeđivanju imate klase koje predstavljaju hijerarhijsku strukturu kroz nasljeđivanje, slično obiteljskom stablu. U ovoj vrsti nasljeđivanja imate više od jednog podređenog razreda koji ima istu osnovnu ili roditeljsku klasu. Drugim riječima, ovo je vrsta nasljeđivanja u kojoj jedna ili više izvedenih klasa ima zajedničku bazu ili roditeljsku klasu.

Hibridno nasljeđivanje vrsta je nasljeđivanja kod koje se dva ili više oblika nasljeđivanja kombiniraju u jedan. U osnovi, ova vrsta nasljeđivanja kombinacija je dva ili više oblika nasljeđivanja da bi se stvorila zatvorena struktura. Imajte na umu da hibridno nasljeđivanje također nije podržano u OO programskim jezicima kao što su C # ili Java.