Programozási technikák Pál László Sapientia EMTE, Csíkszereda, 2009/2010
Előadás tematika 1. Pascal ismétlés, kiegészítések 2. Objektum orientált programozás (OOP) 3. Delphi környezet 4. Komponensek bemutatása 5. Több űrlapos alkalmazások 6. Kivételkezelés 7. Grafika 8. Adatbázis-kezelés 2
Laborgyakorlat tematika 1. Nagyjából követi az előadás tematikát. Kitűzött feladatok közös illetve egyéni megoldása. 2. Használt software: Delphi 7, 8 3
Könyvészet -1/3 [1] Angster Erzsébet : Programozás tankönyv I.- II. Akadémia nyomda, Martonvásár, 1999 [2] Angster Erzsébet : Az objektumorientált tervezés és programozás alapjai : UML Turbo Pascal 4 Kör Bt., Budapest, 2000 4
Könyvészet 2/3 [3] Baga Edit : Delphi másképp Akadémia nyomda, Martonvásár, 1999 [4] Marco Cantú : Delphi 7 mesteri szinten I. II. Kiskapu Kft, 2003 5
Könyvészet - 3/3 [5] Pál László, Máté Szilárd: Alkalmazásfejlesztés Delphiben, Nyomtatás alatt. Előadások, labor feladatok, egyéb dokumentációk megtalálhatók az alábbi linken: www.emte.siculorum.ro/~pallaszlo 6
Vizsgakövetelmények 1. Felmérési mód: kollokvium a) Zárthelyi vizsga I.: 40% (8. hét) b) Zárthelyi vizsga II.: 40% (14. hét) c) Elméleti teszt: 20% ( 14. hét) 7
1. ELŐADÁS Turbo Pascal ismétlés és kiegészítés Objektumorientált programozás (OOP) 8
Pascal típusai Egyszerű típusok 9
Pascal típusai Összetett típusok Típusdefiniálás (type): segítségével készíthetünk saját változó típusokat Definició: Type ujvaltozotipusnev = változótipus; Példa: Type Szovegtipus = String; Var Bekert_szoveg : Szovegtipus; Felsorolt típus Példa: Madarak = (fecske, golya, sas, bagoly); Intervallum típus Betuk : 'A'..'Z'; MunkaNapok : Hetfo..Pentek; Tömb típus Type Sor = array[1..20] of real; Type Tablazat = array[1..10,1..20] of real; 10
Pascal típusai Összetett típusok Rekord típus: különböző típusokból állhat Példa: Type Datum = record Ev : 1900..2050; Ho : 1..12; Nap : 1..31; end; var d:datum; d.ev:= 2009;d.Ho:=9;d.Nap:=14; Halmaz típus: Példa: Type KarakterKeszlet = set of char; szamok = 1..10; sz10 = set of szamok; Var paros: sz10; paros := [2,4,6,8,10]; Műveletek: + egyesítés, * metszet, - Különbség 11
Iterációk Elől tesztelős ciklus while kifejezes do utasitas; Hátul tesztelős ciklus repeat utasitas until feltetel; Növekményes ciklus fel for kezdo to veg do utasitas; Növekményes ciklus le for kezdo downto veg do utasitas; 12
Szelekció Feltételes utasítás: if feltetel then utasitas; if feltetel then utasitas1 else utasitas2; Választás: case kifejezes of ertek1:utasitas1; ertek2:utasitas2; else utasitas; end; 13
Függvények, eljárások Függvények: function nev(argumentumok):tipus; Lokális változók begin Utasítások; nev:= tipus; end; Eljárások: procedure nev(argumentumok); Lokális változók begin Utasítások; end; 14
Egységek (Unit-ok) Egység (Unit): a főprogramhoz hozzászerkeszthető tárgykód Az egység célja: Korábban kipróbált, bevált programrészek hozzáférhetővé tétele más programokban Megvalósítási részletek elrejtése 15
Egységek felépítése Egységfej Unit azonosító; Illesztő rész Interface [Uses azonosító [,azonosító...];] Globális deklarációk (változók, típusok, konstansok, eljárásfejek...) Kifejtő rész Implementation [Uses azonosító [,azonosító...];] A globális és lokális eljárások kifejtése Végrehajtó rész [Begin [utasítás [; utasítás...]] End. 16
Példa egységre Egység Főprogram 17
Objektumorientált Programozás (OOP) 1. Objektum, osztály 2. Objektum létrehozása, inicializálása 3. Hozzáférés az adatokhoz 4. Öröklődés 5. Object Pascal megvalósítás 18
Objektumorientált Programozás (OOP) Természetes gondolkodást, cselekvést közelítő módszer. Valós világ modellezése Modellezési alapelvek: Absztrakció Megkülönböztetés Osztályozás Két legfontosabb eleme: objektum, osztály 19
Objektum Információkat tárol, kérésre feladatokat hajt végre Adatok (attribútumok) és metódusok összessége, mely felelős feladatai elvégzéséért Minden objektum rendelkezik 20
Objektum példa Üzenetek andor megy(táv) elmegy(x,y) fordul(szög) andor (100,50) 30º pozíció(x,y) irányszög Adatok (attribútumok) 21
Objektum példa Programozási technikák - Pál László Üzenetek Lathato(true) Pozició(40,8) Méret(20,16) Cim("Ablak") Ablak (20,16) (100,80) "Ablak" true Adatok pozicio(x,y) meret(sz,m) cim lathato 22
Objektum állapota Az objektumnak mindig van egy állapota (adatok pillanatnyi értékei) Két objektumnak ugyanaz az állapota, ha az adatok értékei megegyeznek Az objektum operációkat hajt végre, melyek hatására állapota megváltozhat Az objektum mindig emlékszik állapotára 23
Objektum azonossága Programozási technikák - Pál László Minden objektum egyértelműen azonosítható Az objektum azonossága független a tárolt értékektől Két objektum akkor sem azonos, ha állapotaik megegyeznek! 24
Osztály, példány Osztály (class) Olyan objektumminta vagy típus, mely alapján példányokat (objektumokat) hozhatunk létre Példány (instance) Minden objektum születésétől kezdve egy osztályhoz tartozik 25
Osztály, példány - Példa Programozási technikák - Pál László kati Ember pozíció(x,y) irányszög megy(táv) elmegy(x,y) fordul(szög) andor zsófi 26
Osztály, példány - Példa Programozási technikák - Pál László Ablak pozicio(x,y) meret(sz,m) cim lathato Lathato(lathato) Pozicio(x,y) Meret(sz,m) Cim(cim) 27
Osztály és példány jelölése UML-ben UML (Unified Modeling Language): egységesített modellezési nyelv Példány (Objektum) Osztály neve Ablak Adatok/ Attribútumok/ Információk/ Változók/ Mezők Metódusok/ Operációk/ Rutinok pozicio(x,y) meret(sz,m) cim: String lathato: boolean Lathato(lathato) Pozicio(x,y) Meret(sz,m) Cim(cim) aablak:ablak pozicio=(10,6) meret=(20,12) cim="ablak" lathato=true Osztály 28
Objektum létrehozása, inicializálása Objektum életciklusa: megszületik, él, meghal Az objektumot létre kell hozni és inicializálni kell! Konstruktor (constructor) : speciális eljárás, memóriát foglal le az objektum számára, inicializálja az adattagokat - Create Destruktor (destructor): felszabadítja az erőforrásokat mielőtt az objektum megsemmisül Destroy Free metódus 29
Objektum inicializálása Ember pozíció(x:number,y:number) irányszög:number Create(x:number,y:number) megy(táv:number) elmegy(x:number,y:number) fordul(szög:number) kati = Ember.Create(100,50) kati:ember pozíció=(100,50) irányszög=0 30
Láthatóság, védelem Az információ elrejtése azt jelenti, hogy az objektum elrejti belügyeit, azt csak az interfészén keresztül lehet megközelíteni Implementáció Interfész metódus1 metódus2 metódus3.. metódusn. Adatok 31
Láthatóság, védelem Hozzáférési módok Publikus (public): az adatok a program bármely részéről elérhetünk Védett (protected): az adott osztályból és abból származó alosztályokból lehet elérni az adatokat Privát (private): az adatmezők és metódusok kívülről nem érhetők el 32
Láthatóság, védelem - Példa Osztály +publikusadat #védettadat -privátadat +publikusmetódus #védettmetódus -privátmetódus objektum :Osztály objektum.publikusadat objektum.publikusmetódus objektum.védettadat objektum.védettmetódus objektum.privátadat objektum.privátmetódus 33
Öröklődés (Inheritance) Már meglévő osztály továbbfejlesztése, módosítása. Meglévő osztály: ős, szülő, alap. Továbbfejlesztett osztály: utód, gyerek, származtatott. Származtatás: Új tulajdonságokat veszünk fel Műveleteket veszünk fel: új művelet, módosítjuk az ős viselkedését Jelölés Õs osztály Utód osztály 34
Öröklődés megvalósítása Örökítéskor három lehetőségünk van: Új változókat adunk hozzá az utód osztályhoz Új metódusokat adunk hozzá az utód osztályhoz Az ősosztály metódusait felülírjuk Ember Nev Szülév Tanul Beszél Hallgató TanfSzám Eredmény Tanul Oktató Tanszék Fizetés Tanít Beszél 35
Utód osztály adatai, üzenetei - Példa Küldhetõ üzenetek A B M1 M2 Õs A, B Ob1 : Õs M1 M2 Õs.M1 Õs.M2 C D M1 M3 Utód A, B, C, D Ob2 : Utód M1 M2 M3 Utód.M1 Õs.M2 Utód.M3 36
Objektumok, osztályok Object Pascalban Osztály deklaráció Type osztalynev = class Adatlista Metoduslista End; Osztály deklaráció Példa Metódus definíció - Példa 37
Objektumok, osztályok Object Pascalban Objektum létrehozás alk1 Az Object Pascal, objektum hivatkozási modellre épül nev fizetes Hivatkozás Objektum adatai Osztály TAlkalmazott nev:string fizetes:integer fizetestemel(f: integer) Kiir Objektum példány alk1 : TAlkalmazott nev = 'Kiss Istvan' fizetes = 1000 38
Konstruktor - Példa 39
Láthatóság, védelem Az osztályok egységekben vannak tárolva Hozzáférési módok: Public (+) Protected (#) Private (-) Published 40
Öröklődés Object Pascalban Osztály származtatás: UML diagram Ős osztály, utód osztály deklaráció TAlkalmazott nev fizetes Create fizetestemel fizeteski Kiir TFonok beosztottakszama Create beosztottakotnovel Kiir 41
Öröklődés Object Pascalban Create és Kiír definiálása Inherited: a legközelebbi örökölt metódus hajtódik végre Objektum példányok létrehozása 42
Láthatóság, védelem protected (védett): az osztályt deklaráló egységen kívülről nem enged hozzáférést, kivéve a származtatott osztályok. Egy egységben található osztályok egymás barátai UML diagram és osztály deklaráció hozzáférési szintekkel TAlkalmazott #nev #fizetes + Create + fizetestemel + fizeteski +Kiir TFonok - beosztottakszama + Create + beosztottakotnovel +Kiir 43