Pranešėjas Jurij Kuznecov
description
Transcript of Pranešėjas Jurij Kuznecov
![Page 1: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/1.jpg)
PranešėjasJurij KuznecovJurij Kuznecov
Vilniaus universiteto Matematikos ir informatikos institutas
Objektinis programavimas: apžvalga ir problemos
![Page 2: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/2.jpg)
Procedūrinis programavimas
Tam kad sukurti programą jo pagrindu, reikia:Apibrėžti užduotį, kurią reikia išspręstiApgalvoti sąsają tarp vartotojo ir programosIšskaidyti programą į logiškai užbaigtus etapusSukurti programos tekstąApderinti programąTestuoti programą
![Page 3: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/3.jpg)
Objektiškai-orientuotas programavimas (OOP)
Tam, kad sukurti programą panaudojant šią metodologiją, reikia:Apibrėžtį užduotįNustatyti unikalius objektus sprendžiamosios užduoties srityjeNustatyti sąryšį tarp objektųSukurti objektų klases, nustatant kintamuosius, kurie pristato visas galimas būsenas, kuriose gali būti objektasNustatyti pranešimus, kuriuos priima kiekvienas objektas, ir funkcijų kodus, pagal kuriuos objektas reaguos į šiuos pranešimusPaskelbti duotųjų klasių objektus Nustatyti pradinę sistemos būsenąSukompiliuoti programą
![Page 4: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/4.jpg)
Programavimų kalbų klasifikacija (I)
Pirmos kartos kalbų panaudojimo sritis buvo apribota sekančiomis savybėmis:Mažos operatyvinės atminties kiekiuĮvesties/išvesties sistemos netobulumu
![Page 5: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/5.jpg)
Programavimų kalbų klasifikacija (II)
![Page 6: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/6.jpg)
Programavimų kalbų klasifikacija (III)
Algoritminių abstrakcijų plėtra. Antra programavimo kalbų karta
![Page 7: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/7.jpg)
![Page 8: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/8.jpg)
![Page 9: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/9.jpg)
Abstraktus duomenų tipas
Abstraktus duomenų tipas — tai duomenų visuma kartu su dauguma operacijų, kurias galima vykdyti su tais duomenimis.
![Page 10: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/10.jpg)
Objektiškai – orientuoto programavimo supratimas
Pagal objektiškai – orientuotų programų kūrimo metodų autoritetą Grady Booch „objektiškai – orientuotas programavimas (OOP) – tai programavimo metodologija, kuri pagrįsta programos pateikimu objektų visumos pavidalu, kiekvienas iš kurių yra tam tikros klasės realizacija, o klasės sudaro hierarchiją paveldimumo principu.“
![Page 11: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/11.jpg)
Objektai ir klasės
Baziniai objektiškai – orientuotos programos blokai yra objektai ir klasės. Objektus galima įsivaizduoti, kaip kažką jaučiamą, įsivaizduojamą ir turinti gerai nustatytą elgseną. Tokiu būdu objektą galima arba pamatyti, arba pačiupinėti, arba žinoti, kad jis yra. Pvz. objektas pateiktas informacijos pavidalu, kuri yra saugoma kompiuterio atmintyje. Tokiu atveju, galima pasakyti, kad objektas – liečiama esmė, kuri ryškiai parodo savo elgseną.
Objektas – tai dalis mus supančios realybės, t.y. jis egzistuoja laike ir erdvėje (pirmąkart objekto sąvoką programavime buvo įvesta Simula kalboje). Formaliai nustatyti objektą sunku. Tai galima padaryti per kai kurias savybes, o būtent: objektas turi būseną, elgseną ir gali būti vienareikšmiškai identifikuotas (kitais žodžiais turi unikalų vardą).
![Page 12: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/12.jpg)
Klasė
Klasė – objektų aibė, turinti bendrą struktūrą ir bendrą elgseną. Klasė – aprašymas (abstrakcija), kuris parodo, kaip pastatyti egzistuojanti laike ir erdvėje šios klasės kintamąjį, vadinamu objektu.
![Page 13: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/13.jpg)
Baziniai OOP principai
Baziniams OO programavimo stiliaus principams priklauso:InkapsuliacijaPaveldimumasPolimorfizmasPranešimų siuntimas
![Page 14: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/14.jpg)
Inkapsuliacija
principas, pagal kurį objekto vidiniai duomenys yra slepiami ir jais galima manipuliuoti tik naudojant objekto viešus metodus.
![Page 15: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/15.jpg)
Paveldėjimas
Pagal Grady Booch „paveldėjimas – tai toks santykis tarp objektų, kai vienas objektas pakartoja kito objekto struktūrą ir elgseną“.
![Page 16: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/16.jpg)
Polimorfizmas
Leidžia naudoti tas pačias funkcijas skirtingų problemų sprendimui. Polimorfizmas pasireiškia tame, kad po vienu vardu slepiasi skirtingi veiksmai, kurių turinys priklauso nuo objekto tipo.
![Page 17: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/17.jpg)
Objektinio tipo aprašymasType <objekto tipo vardas >= object <laukas>; <laukas>; …. <metodas>; <metodas>; end ;
ObjectPascal turi specialų užrezervuotą žodį class objektų aprašymui.Type <objekto tipo vardas >= class <laukas>; …. <metodas>; <metodas>;end ;
![Page 18: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/18.jpg)
Pavyzdys
Įvedamas objektinis tipas „protėvis“, kuris turi duomenų lauką Name (vardas) ir gali atlikti sekančius veiksmus:Skelbti: „Aš esu protėvis!“Skelbti savo vardąType tProt = object Name : string ; {objekto duomenų laukas} Procedure Declaration ; {objekto metodų paskelbimas} Procedure MyName ; End ;
![Page 19: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/19.jpg)
Pavyzdys (II)
Procedure tProt.Declaration ; {objekto metodo realizacija} begin writeln („Aš – protėvis!“); end ; Procedure tProt.MyName ; {objekto metodo realizacija} begin writeln(„Aš –„ , Name); end;
![Page 20: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/20.jpg)
Pavyzdys (III) - Egzemplioriai
{Objektinio tipo paskelbimas ir jo metodo aprašymas} var v 1: tProt ; {objekto egzemplioriaus paskelbimas} begin v1. Name := ‘Vardenis Pavardenis’; v1.Declaration; v1.MyName end.
with v1 do begin Name:= ‘Vardenis Pavardenis; Declaration ; MyName end ;
![Page 21: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/21.jpg)
Tipų hierarchija (paveldimumas)
Tipus galima išskaidyti į hierarchiją. Objektas gali paveldėti komponentus iš kito objektinio tipo. Objektas paveldėtojas – tai palikuonis. Objektas, kuriam paveldi – protėvis. Pabrėžime, kad paveldėjimas yra priskiriamas tik prie tipų, bet ne prie objektų egzempliorių.
![Page 22: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/22.jpg)
Tipų hierarchija (pavyzdys) (I)
tуре tSon= оbject(tProt) {Tipas, paveldintis tProt }
procedure Declaration; {protėvio metodų perdengimas }
procedure Му Name(Prot : tProt);
end ;
tуре tGrandSon=object(tSon) {Tipas, paveldintis tSon}
procedure Declaration ; {Protėvio metodų perdengimas}
end ;
![Page 23: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/23.jpg)
Tipų hierarchija (pavyzdys) (II)
procedure tSon.Declaration ; {dukterinių objektų metodų realizacija} begin writeln (" Aš — tėvas !"); end; --------------------------------------------procedure tSon .Му Name ( prot : tProt ); begin inherited Му Name ; {tiesioginio protėvio metodo iškvietimas} writeln ("Aš — sūnus ", prot.Name); end;----------------------------------------------------procedure tGrandSon.Declaration; beginwriteln (" Aš — anūkas !"); end;
![Page 24: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/24.jpg)
Tipų hierarchija (pavyzdys) (III)
{Objektinių tipų egzempliorius galima aprašyti kaip tipizuotas konstantas, kas ir yra padaryta }const prosen : tProt = ( Name : "Antanas Adomaitis Kazio"); tėvas : tSon = ( Name : "Justas Adomaitis Antano"); anūkas : tGrandSon = ( Name : "Julius Adomaitis Justo"); {skyrius, kuriame yra aprašomos procedūros ir funkcijos} begin prosen.Declaration ; {bendro protėvio metodų iškvietimas } prosen.Му Name; writeln; tėvas.Declaration; tėvas.MyName(prosen); { objekto tėvas tipo tSon metodų iškvietimas } writeln; anūkas.Declaration; { objekto anūkas tipo tGrandSon iškvietimas} anūkas.MyName ( tėvas ); end.
![Page 25: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/25.jpg)
Tipų hierarchija (pavyzdys) (IV)
Programos darbo rezultatas bus sekantis:Aš – protėvis!Aš — Antanas Adomaitis Kazio Aš —tėvas! Aš — Justas Adomaitis Antano Aš —sūnus Antanas Adomaitis Kazio Aš —anūkas! Aš — Julius Adomaitis JustoAš — sūnus Justas Adomaitis Antano
![Page 26: Pranešėjas Jurij Kuznecov](https://reader036.fdocument.pub/reader036/viewer/2022062304/568144a8550346895db17086/html5/thumbnails/26.jpg)
AČIŪ UŽ DĖMESĮ