Oop osztályok. Objektum-orientált programozás

A feltételek "tárgy" és "osztály" mindenki számára ismerős. A számítógépes tudósok számára azonban saját alszövegük van. Ezek az objektumorientált programozás alapfogalmai. Az osztályok a fejlesztő által meghatározott adattípusok, amelyeket a továbbítás és tárolás módja, a felhasználás profilja és a velük végrehajtható műveletek halmaza jellemez. Ezek különböznek abban, hogy lehet végrehajtani, mint egy interfész.

Mi az OOP (objektumorientált programozás)

A tapasztalt fejlesztők jól ismerik a COBOL és a C nyelveket. A rájuk írt programok lépésenkénti utasítások sorozata volt. Eljárásokat és funkciókat használtak a Program modulárisvá tételéhez. Ez a paradigma a logikára, nem pedig az adatokra, hanem azok kombinálásának módszereire összpontosított.

Objektumorientált programozási osztályok

A modern programozási nyelvek Delphi, Java, C# és mások objektum-orientált megközelítést követnek. At ugyanakkor a fontosság az adatok, nem csak a feladat utasításainak írása. Az objektum olyan dolog vagy ötlet, amelyet modellezni szeretne. Bármi lehet, például alkalmazott, bankszámla, autó, különféle bútorok stb.

Az objektumorientált programozás (OOP) fogalma eredendően a következő kritériumokhoz kapcsolódik:

  • Absztrakció.
  • Kapszulázás.
  • Öröklés.
  • Polimorfizmus.

Nézzük meg mindegyiket részletesebben.

Absztrakció

Ez a kritérium lehetővé teszi, hogy összpontosítson arra, amit maga az objektum csinál, de nem arra, hogy ezeket a műveleteket hogyan hajtják végre a programozás során. Az OOP azt jelenti, hogy az absztrakció az objektum maximális adatmennyiségének ismerete. Segít olyan független modulok létrehozásában, amelyek valamilyen módon kölcsönhatásba léphetnek egymással.

Megpróbálunk szelektíven csak azokra a dolgokra összpontosítani, amelyek fontosak számunkra (az életben) vagy a modulunk számára (a programozásban). Az egyik független modul megváltoztatása nem érinti a többit. Az egyetlen dolog tudnunk kell, - ez az, amit ő ad nekünk. Az a személy, aki ezt a modult használja, nem kell aggódnia, hogy a feladat megoldódott, mi történik pontosan a háttérben.

A C osztály konstruktora

Az általunk használt mindennapi tárgyak absztrakciókat alkalmaznak különböző szinteken. Az objektumorientált programozás egyik példája a fékezés alkalmazása egy autóban. Ez a rendszer elvont: elegendő, ha egy autós megnyomja a pedált, hogy a jármű lelassuljon és megálljon. A gyorsulási rendszer módosítása nem befolyásolja a fékrendszert, mivel függetlenek. A vezetőnek nem kell megértenie a fékek belső működését. Csak a pedált kell időben megnyomnia. Ebben az esetben a fék (mind a tárcsa, mind a dob) működni fog, az autó pedig lelassítja a sebességet.

Kapszulázás

Ez a koncepció szorosan kapcsolódik az absztrakcióhoz. A kapszulázás a közzététel egy probléma megoldása, ez nem követeli meg a felhasználótól, hogy teljes mértékben megértse a tárgykörét. Az adatokat és a viselkedést egyetlen egészbe köti, és nem teszi lehetővé a kliens vagy a modul felhasználója számára, hogy megismerje azt a belső ábrázolást, amelyben az absztrakciós viselkedés megvalósul.

Objektum-orientált programozási rendszer

Az adatok. nem érhető el közvetlenül, bizonyos funkciókon keresztül érhető el. Az objektum belső elemeinek elrejtése védi annak integritását, megakadályozva a felhasználókat abban, hogy az összetevő belső adatait érvénytelen vagy inkompatibilis állapotba továbbítsák.

Öröklés

Ez egy kód újrafelhasználási mechanizmus, amely segíthet csökkenteni a duplikációt. Ez a koncepció az objektumorientált programozási nyelvek erőteljes jellemzője. Segít az osztályok hierarchiába rendezésében, lehetővé téve számukra, hogy örököljék az attribútumokat és a viselkedést a fenti összetevőkből.

Példa az öröklésre: a papagáj madár, az Orosz rubel egyfajta valuta. Azonban a kifejezés "a bank egy bankszámla" nem helyes. Ez a kapcsolat akkor nyilvánvaló, ha valamilyen entitást le kell írni a probléma adott nyilatkozatában. Az öröklés felhasználható az OOP általános megvalósításának és viselkedésének meghatározására, majd a speciális osztályok számára, hogy újradefiniálják vagy megváltoztassák ezeket a mutatókat valami konkrétabbra. Az öröklés nem működik visszafelé. A forrás (az úgynevezett szülő) nem rendelkezik a származtatott (gyermekosztály)tulajdonságaival.

Fontos megjegyezni, hogy a megoldás modellezésekor nem érdemes több öröklési szintet hozzáadni. Meg kell próbálnia meghatározni a modellezett objektumok általános attribútumait és viselkedését. Ezután ennek alapján folytathatja a megfelelő szülőosztályt meghatározó kód refaktorálását. A teljes megvalósítás áthelyezhető bele.

Polimorfizmus

Ez a koncepció lehetővé teszi a számítógépes rendszerek bővítését új speciális objektumok létrehozásával. Ugyanakkor lehetővé teszi, hogy a jelenlegi verzió kölcsönhatásba lépjen az új verzióval, anélkül, hogy figyelmet fordítana annak sajátos tulajdonságaira.

Például, ha a feladat egy üzenet írása egy darab papírra, használhat tollat, ceruzát, jelölőt vagy tollat. Elég, ha a szerszám elfér a kezedben, és lehetősége van arra, hogy nyomot hagyjon, amikor papírral érintkezik. Kiderül, hogy egy személy bizonyos cselekedetei feliratot készítenek egy lapon, és melyik eszközt használják ebben az esetben, nem olyan fontos az információ továbbításához.

Egy másik példa a polimorfizmus egy objektum-orientált programozási rendszer egy repülőgép és egy űrsikló, amely lehet nevezni repülő tárgyak. Hogyan mozognak pontosan az űrben? Természetesen nagy különbség van a munkájukban. Vagyis a mozgásuk végrehajtásának módjai nem azonosak. A néző szempontjából azonban mindkét tárgy repül.

Az OOP végrehajtása

Az öröklés a polimorfizmus elérésének egyik módja, ahol az öröklött osztályban meghatározott viselkedés felülírható a módszer egyedi megvalósításának megírásával. Ezt hívják újradefiniálásnak (fordítási idő polimorfizmus).

A polimorfizmusnak van egy másik formája, az úgynevezett túlterhelés, amelyben az öröklést nem veszik figyelembe. A módszer neve ugyanaz lesz, de a módszer argumentumai eltérőek.

A fogalmak jellemzői "osztály" és "tárgy"

Az objektum-orientált programozás megkezdéséhez meg kell találnunk, hogy mi az OOP osztály és az objektum. Fontos megérteni a különbséget közöttük. Az osztály egy objektum létrehozásának terve. Meghatározza az attribútumokat és a viselkedést. Úgy néz ki, mint egy ház mérnöki rajza. Az objektum az osztály példánya. Ez a különbség közöttük. Az alábbi példa bemutatja az osztály deklarálását "TForml" és változó "Forml" be programozási nyelv Delphi:

typeTForml =osztály(TForm)Buttonl: TButton;eljárás ButtonlClick(Feladó: TObject);vége;varForml: TForml;

Ha például egy autót akarunk modellezni a programunkban, akkor határozza meg annak tulajdonságok: modell, üzemanyag, gyártmány, szín, , viselkedése, , valamint az úgynevezett módszerek: a motor indítása, fékezés, gyorsulás stb. Nyilvánvaló, hogy ezek a mutatók nemcsak egy márkára vagy modellre jellemzőek jármű.

Objektum-orientált megközelítéssel megpróbáljuk általánosítani az objektumunkat (gépünket) azzal, hogy azt állítjuk, hogy az, amelyet a programunkban modellezni fogunk, bizonyos számú attribútummal és metódussal rendelkezik. A járműnek lehetnek más mutatói és jellemzői is, de ezek elegendőek ahhoz, hogy megértsük, hogyan működik az osztály a PLO - ban.

Amikor ezeket az adatokat használjuk, konkrét paraméterekkel rendelkező autót hozunk létre. Ugyanazon objektum (gép) programozásával különböző jellemzőket vehetünk fel, amint azt az alábbi táblázat mutatja:

1. tárgy2. objektum
Típus: VAZ 2107Típus: VAZ 2109
üzemanyag: benzinüzemanyag: dízel
Szín: PirosSzín: Zöld
Motorindítási módszer: Start () motorindítási módszer: Start ()
Fékezési módszer: szünet ()Fékezési módszer: szünet ()
Gyorsulási módszer: gyorsulás ()Gyorsulási módszer: gyorsulás ()

Így az objektumorientált programozás megkönnyíti a komplex valós rendszer viselkedésének modellezését. Az OOP segítségével az adatok és függvények (attribútumok és metódusok) egy objektumban kombinálódnak. Ez megakadályozza az OOP-val megosztott vagy globális adatok szükségességét. Ez a megközelítés a fő különbség az objektumorientált és az eljárási megközelítések között.

Mi az OOP osztály

Az OOP osztályok különböző típusú elemekből állnak:

  1. Adatmezők: az osztály állapotának tárolása változók és struktúrák segítségével.
  2. Módszerek: rutinok meghatározott adatok manipulálására.
  3. Egyes nyelvek lehetővé teszik a harmadik típus-tulajdonságok. Ez valami az első kettő között.

Módszerek

Az osztály vagy példányainak viselkedését módszerek segítségével határozzuk meg. Ezek olyan szubrutinok, amelyek képesek objektumokon működni. Ezek a műveletek megváltoztathatják az objektum állapotát, vagy egyszerűen megadhatják a hozzáférés módját.

Számos módszer létezik. Támogatásuk a nyelvtől függ. Néhányat a programozó kódja hoz létre és hív meg, másokat (speciálisakat, például konstruktorokat, destruktorokat és konverziós operátorokat) a fordító által generált kód hoz létre és hív meg. A nyelv lehetővé teheti a programozó számára, hogy meghatározza ezeket a speciális módszereket.

Interfész

Ez az absztrakt cselekvések csoportjának meghatározása. Megtudja, milyen viselkedést kell mutatnia egy adott objektumnak anélkül, hogy meghatározná, hogyan kell végrehajtani.

Egy objektumnak több szerepe is lehet, a felhasználók pedig különböző nézőpontokból használhatják. Például, "személy típusú objektum" szerepei lehetnek:

  • Katona (a viselkedéssel "a forgatás az ellenség").
  • Férj (a viselkedéssel "szeretni a feleségét").
  • Adófizető (a viselkedéssel "az adófizetés") és így tovább.

Mindegyik objektum azonban a maga módján hajtja végre viselkedését: Misha időben fizet adót, Andrey lejárt, Peter pedig egyáltalán nem. Ugyanez mondható el minden objektumról és más szerepekről.

Mi az OOP

Felmerül a kérdés, hogy az összes objektum alaposztálya miért nem interfész. Ennek az az oka, hogy ebben az esetben minden osztálynak egy kicsi, de nagyon fontos módszercsoportot kell végrehajtania, amely felesleges időt vesz igénybe. Kiderül, hogy nem minden osztálynak van szüksége konkrét megvalósításra - az Általános alapértelmezés a legtöbb esetben elegendő. Nincs szükség semmilyen módszer újradefiniálására, de ha a helyzet megköveteli, lehetséges azok újradefiniálása.

Jó példa erre a TV elején található gombok. Azt mondhatjuk, hogy ezek a felhasználói felület a készülékház másik oldalán lévő vezetékekkel. Egy személy megnyomja a bekapcsológombot a készülék be-és kikapcsolásához. Ebben a példában egy adott TV egy példány, mindegyik módszert egy gomb képviseli, és együtt alkotják az interfészt. A saját leggyakoribb . Ez a kapcsolódó módszerek egy csoportjának specifikációja azok végrehajtása nélkül.

Tervező

Ez a kritérium felelős egy objektum előkészítéséért a cselekvéshez, például az összes adat és elem kezdeti értékeinek beállításához. Bár különleges szerepet játszik, a konstruktor csak egy másik funkció, amely felhasználható információk továbbítására az argumentumok listáján. Ezeket fel lehet használni, hogy inicializálja azt. A konstruktor függvény neve és az osztály ugyanaz.

A következő példa elmagyarázza az osztálykonstruktor fogalmát C++ - ban (közös programozási nyelv):

#tartalmazzahasználatanévtér std;osztályVonal{nyilvános:voidsetLength(dupla len );duplagetLength(void);Vonal();// Constructor nyilatkozatprivát:dupla hossz;};// A függvények meghatározása, beleértve a konstruktort isVonal::Vonal(void){cout <<"Az objektum létrejött"<< endl;}void Vonal::setLength(dupla len ){hossz = len;}dupla Vonal::getLength(void){vissza hossz;}//int program body(){Vonal vonal;// Húr hosszavonal.setLength(6.0);cout <<"A vonal hossza : "<< vonal.getLength()<<endl;vissza0;}

A fenti kód lefordításakor és végrehajtásakor a következő eredményt adja:

Az objektum létrejött

Vonal hossza: 6

Destructor

Ez egy speciális osztályfüggvény, amely elpusztítja az objektumot, amint annak hatóköre véget ér. A fordító automatikusan meghívja a destruktort, amikor az objektum kiesik a hatókörből.

A destruktor szintaxisa megegyezik a konstruktoréval, de az osztály nevét ebben az esetben tilde jelzéssel használják "~" mint előtag.

A következő C++ példa elmagyarázza a destruktor fogalmát:

#tartalmazzahasználatanévtér std;osztályVonal{nyilvános:voidsetLength(dupla len );duplagetLength(void);Vonal();// Kivitelező nyilatkozat~Vonal();// A pusztító nyilatkozataprivát:dupla hossz;}// A függvények meghatározása, beleértve a konstruktort isVonal::Vonal(void){cout <<"Az objektum létrejött"<< endl;}Vonal::~Vonal(void){cout <<"Az objektum törölve lett"<< endl;}void Vonal::setLength(dupla len ){hossz = len;}dupla Vonal::getLength(void){vissza hossz;}//int program body(){Vonal vonal;// Vonal hosszavonal.setLength(6.0);cout <<"A vonal hossza : "<< vonal.getLength()<<endl;vissza0;}

Amikor a fenti kódot lefordítják és végrehajtják, a következő eredményt adja:

Az objektum létrejött

Vonal hossza: 6

Az objektum törölve lett

Milyen előnyei vannak az osztályoknak

A szervezet előnyei szoftver az objektum osztályok három kategóriába sorolhatók:

  • Gyors fejlődés.
  • Könnyű karbantartás.
  • Kód és design újrafelhasználása.
Az objektumorientált programozás alapfogalmai

Az osztályok és az OOP általában hozzájárulnak a gyors fejlődéshez, mivel csökkentik a kód és a felhasználók közötti szemantikai szakadékot. Ezt sok programozó értékelte. Ennek a rendszernek köszönhetően az elemzők kommunikálhatnak mind a fejlesztőkkel, mind a felhasználókkal ugyanazon szókincs használatával, fiókokról, ügyfelekről, fiókokról stb.

Az objektumosztályok gyakran hozzájárulnak a gyors fejlődéshez, mivel a legtöbb objektumorientált környezet erőteljes hibakeresési és tesztelési eszközökkel rendelkezik. Az osztályok példányai futás közben ellenőrizhetők, hogy megbizonyosodjon arról, hogy a rendszer megfelelően működik-e. Ezenkívül a legtöbb objektumorientált környezet a központi memóriaterületek helyett a hibakeresési képességeket értelmezi. Ennek eredményeként a fejlesztők pontosan elemezhetik, hogy hol történt a hiba a programban, és megnézhetik, hogy mely módszereket, argumentumokat és értékeket használták.

Cikkek a témában