Kihagyás

1. gyakorlat

A gyakorlat anyaga

A követelmények elérhetőek a CooSpace felületén is, a Programozás I. gyak. IB204L-X (ahol X a gyakorlatod sorszáma) színtérre kattintva, a Követelmények menüpontban.

Követelmények

A foglalkozásokon való részvétel követelményei és a távolmaradás pótlásának lehetősége

Kötelező megjelenni minden gyakorlaton. Kettőnél több igazolatlan hiányzás esetén (az első két hetet kivéve) a kurzus nem teljesítettnek minősül. Az igazolatlan hiányzások nem eshetnek a zárthelyi dolgozatok időpontjára. A hiányzásokat a TVSZ 8.10.9. pontja szabályozza, ezek az irányadóak.

Az igazolás módja a foglalkozásokon való távollét esetén

A távolmaradás időpontjára szóló orvosi igazolás, melyet a gyakorlatvezetőnek kell bemutatni a távolmaradás okának megszünését követő első tanórán vagy a gyakorlatvezető fogadóóráján.

A félévközi ellenőrzések (beszámolók, zárthelyik) száma, témaköre és időpontja, pótlásuk és javításuk lehetősége

A félév során 5 zárthelyi dolgozat kerül megírásra: 3 db 15 perces röpdolgozat (3*10 pont) és 2 db 90 perces zárthelyi dolgozat (2*35 pont).

Röpdolgozatok

3 darab 10 pontos röpdolgozat, melyek a gyakorlatok első 15 percében kerülnek megíratására.

  1. röpdolgozat időpontja: 4. héten, gyakorlaton
  2. röpdolgozat időpontja: 6. héten, gyakorlaton
  3. röpdolgozat időpontja: 11. héten, gyakorlaton

Zárthelyi dolgozatok

2 darab 35 pontos, számítógép előtt megírandó dolgozat, melyek a gyakorlat idejében kerülnek megíratásra.

  1. zárthelyi időpontja: 9. héten, gyakorlaton
  2. zárthelyi időpontja: 14. héten, gyakorlaton

Pótlás

Azok pótolhatnak, akik igazoltan nem tudták megírni valamelyik zárthelyi dolgozatot.

  • Röpdolgozatok pótlásának időpontja: gyakorlatvezetővel egyeztetve.
  • Zárthelyi dolgozatok pótlásának időpontja: a szorgalmi időszak utolsó hetében, gyakorlaton.

Javítás

Azok javíthatnak, akik nem érték el valamelyik részteljesítésből a minimumot. A javító az egész félévi anyagból van összeállítva. Érvényteleníti az addig megírt zárthelyi dolgozatokat, röpdolgozatok. Elérhető maximális pontszám: 50

  • Időpontja: a szorgalmi időszak utolsó hetében, gyakorlaton.

Évközi teljesítések szorgalmi időszak utáni javítása, pótlása nem lehetséges.

A félév teljesítésének követelményei

  • Legalább 50%-os röpdolgozat összpontszám
  • Legalább 50%-os zh összpontszám

Az osztályzat kialakításának módja

  • Röpdolgozatok: max. 30 pont
  • ZH-k: max. 70 pont
  • Összesen: max. 100 pont

A számonkéréseken kívül a hallgatóknak lehetőségük van pluszpontok szerzésére is, az órán való aktív részvétellel, szorgalmi feladatok megoldásával, szorgalmi projekt elkészítésével. Ezek csak és kizárólag az elégséges szint elérése után érvényesek.

Szorgalmi projekt

A hallgató a félév folyamán egy szabadon választható szorgalmi projektet készíthet, amellyel legfeljebb 15 plusz pontot szerezhet, a megoldás minőségétől függően. A lehetséges feladatok listája elérhető itt A választott feladatot a gyakorlatvezetővel egyeztetni kell. A szorgalmi feladattal szerezhető pontszámok csak akkor élnek, ha a hallgató legalább 70 pontot gyűjt a félév során.

A feladat beadásának határideje: 13. hét, a gyakorlatvezetővel egyeztetve.

Ponthatárok A gyakorlati pontozás a következőképpen alakul:

  • 0-49 elégtelen (1)
  • 50-62 elégséges (2)
  • 63-75 közepes (3)
  • 76-88 jó (4)
  • 89-100 jeles (5)

A számonkérés során felhasználható segédletek

A számonkérések során semmilyen segédlet nem használható.

Egyéb A nem hivatalos egyetemi címről (...@stud.u-szeged.hu) küldött levelek semmisnek minősülnek és azokra nem válaszolunk.

Feladatok

  1. Java JDK telepítése saját számítógépre.

Kapcsolódó linkek

A Java használatával, telepítésével kapcsolatos, gyakori problémák és megoldásuk angol nyelven. Ha valakinek ezektől eltérő problémája van, az keresse meg a gyakorlatvezetőjét e-mailben.

Java nyelvről röviden

A Java működése

A kép forrása, ahol bővebben olvashatsz a Java virtuális gép működéséről

JRE/JDK

JRE - azaz Java Runtime Environment - beszerzése külön itt lehetséges. Ez biztosítja a Java alkalmazások futtatásának minimális követelményeit, mint például a JVM (Java Virtual Machine) vagy például a böngészők számára a Java beépülő modult és a Java Web Startot is.

A JDK - azaz Java Development Kit - beszerzése itt lehetséges. A JDK tartalmazza a Java alkalmazások futtatásához, valamint azok készítéséhez, fordításához szükséges programozói eszközöket is (tehát a JRE-t nem kell külön letölteni, a JDK tartalmazza). Így otthonra is a JDK telepítését javasoljuk.

Első Java nyelvű programunk

A kapcsolódó Oracle oldal.

A fájl elérhető a /pub/Programozas-I/nappali/gyakorlat/01/HelloWorld.java útvonalon.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); //Kiírja, hogy Hello World!
    }
}

Láthatjuk, hogy a main függvény visszatérési értéke void. Ez C-ben egy int volt, amely a program lefutásának helyességéről árulkodott. Javaban a hibakezelés teljesen más koncepción alapul, amit a későbbi órákon részletesen ismertetünk.

Fordítás, futtatás

Fordítás

Az elkészült fájlt mentsük el HelloWorld.java néven. Fontos, hogy mindig olyan néven mentsük el a fájlt, ami a publikus osztályunk neve. Most már csak a fordítás, majd futtatás van hátra. Az elkészült programokat a parancssorból a javac nevű fordítóval fordítjuk le, a következőképp: javac FájlNeve.java, jelen esetben javac HelloWorld.java (A Java fordítóról, kapcsolóiról bővebben olvashatsz ezen az oldalon). Normál esetben a parancs kiadása után semmilyen válasz sem érkezik, csak visszakapjuk a kurzort egy idő után.

Fordítás

A fordítás befejezése után látnunk kell a HelloWorld.java fájl mellett egy HelloWorld.class nevű fájlt is. Ez a fájl tartalmazza az elkészült Java bájtkódot, amelyet aztán hordozhatunk, és bármely gépen futtathatjuk, ahol van egy Java virtuális gép (azaz a célszámítógépen telepítve van a JRE).

Futtatás

Az elkészült alkalmazás futtatása a java paranccsal történik, melynek használata a következő: java FoOsztaly arg1 arg2 arg3 ... argN, jelen esetben java HelloWorld. Fontos, hogy a HelloWorld után nem szerepel a .class kiterjesztés, a JRE automatikusan odateszi. A parancs hatására a JRE megkeresi a megadott osztályt a fájlrendszeren, majd miután betöltötte, a benne található main() metódust kezdi el futtatni. Ha nem találja a binárist, vagy nincs benne main, hibával kilép.

Megjegyzés A fordítás után elkészült .class kiterjesztésű fájlba belenézhetünk a JDK-ban szereplő javap paranccsal, vagy akár vissza is fejthetjük őket, így a C-vel ellentétben (ahol a fordítás végső eredménye egy bináris fájl), itt erre is figyelnünk kell a későbbiekben.

Kommentek, javadoc

Egyszerű kommentek

  • Hagyományos, /* és */ közé írt komment, ismerős lehet C-ből.
  • Egysoros komment, amely a kiírástól a sor végéig kommentet fog jelenteni: // komment

Javadoc kommentek

Segítségével a forráskódba írt kommentekből HTML alapú dokumentáció generálható. Egy példa a generált HTML oldalra.
Sokféle generátor létezik, a legismertebb a Java JDK-ban is meglévő javadoc nevű alkalmazás, melyről bővebben itt olvashatsz, de ezen kívül számtalan alternatíva létezik: Doc-O-Matic, Doc++, Doxygen Használata egyszerű, a hagyományos kommentezés helyett a /** és */ közé írjuk a kommenteket, majd ezekben használhatunk különféle speciális hivatkozásokat, melyek az elkészült dokumentációban speciálisan jelennek meg. Néhány példa:

  • @author - szerző
  • @version - verzió
  • @param - paraméter
  • @throws - kivételek, amiket dobhat az adott függvény/osztály
  • @return - visszatérési érték
  • @see - hivatkozás más osztályokra

Az összes speciális hivatkozás és leírásuk elérhető ezen a linken.

/**
 * Hello World program. 
 * @author Elso Hallgato
 * @author Masodik Hallgato
 * @version 1.0
 */
public class HelloWorld {

  /**
   * A main fuggveny
   *
   * @param args a parancssori parameterek.
   * @author Elso Hallgato
   * @version 1.0
   */
  public static void main(String[] args) {
    System.out.println("Hello World!");
  }

  /**
   * Osszeadas 
   *
   * @param a az elso szam.
   * @param b a masodik szam.
   * @author Masodik Hallgato
   * @version 0.8
   * @return a szamok osszege.
   */
  public static int add(int a, int b) {
    return a+b;
  }
}

Az elkészült forráskódból elkészíthetjük a dokumentációt a beépített javadoc paranccsal, a jelenlegi példában javadoc HelloWorld.java, majd az elkészült fájlok közül nyissuk meg az index.html fájlt.

Beolvasás az alapértelmezett inputról

Az alábbiakban bemutatjuk, hogy hogy kell az alapértelmezett bemenetről beolvasni egy szöveget, számot. Ennek célja, hogy az olvasó elkezdhessen interaktív alkalmazásokat készíteni. Nem célunk, hogy minden részletet megismertessünk, elmagyarázzunk, a részletes ismertetés egy későbbi gyakorlaton lesz.

import java.util.Scanner;

public class Beolvasas {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Hello! Hogy hívnak?");
        String nev = sc.nextLine();
        System.out.println("Hello " + nev + "! Hany eves vagy?");
        int kor = sc.nextInt();
        System.out.println("Hello " + nev + ", aki " + kor + " eves.");
    }
}

Fejlesztői környezetek, az Eclipse használata

Az Eclipse egy integrált fejltesztői környezet, amely arra szolgál, hogy megkönnyítse a programozást. Számos módon egyszerűsíti munkánkat: ez magába foglalja a programozás alapjaiból ismert szintaxis-színezést, és sok mást is, mint például hibakeresést, vagy az egy gombnyomással történő futtatást. Számos hasonló fejlesztői környezet is létezik, mint például a NetBeans vagy az IntelliJ.

Indításkor mindig a workspace választó ablak nyílik meg, ebben kiválaszthatjuk, hogy mely könyvtárban szeretnénk dolgozni. Az adott workspace-en belül könnyen és gyorsan el tudjuk érni projektjeinket és ezeken belüli fájljainkat. Ettől persze még lehetséges a workspace-en kívüli fájlok megnyitása is, illetve később másik wokspace kiválasztása.

Workspace választása

Indítás után egy részekre tagolt felületet kapunk. Ezen részek számunkra lefontosabbjait tekintjük most át.

A Package Explorer jeleníti meg a kiválasztott workspace tartalmát. Ez annyit jelent, hogy itt láthatjuk sorban a projektjeinket, illetve az azokban felhasznált fájlokat. Minden projektben lesz egy src mappánk, amely a projekt létrehozásakor generálódik. Ebbe írjuk a tényleges programkódot. Itt csomagokban tárolhatunk fájlokat. A gyakorlatban a csomagok is egyszerű könyvtárak, ne ijedjünk meg tőlük. Az src mappa mellett láthatunk egy JRE System Library nevű fájlt. Ez a futtató környezetet tartalmazza, ettől sem kell megijedni.

Alul található egy sáv, melyen több funkciót is elérhetünk. Ebből jelenleg nekünk legfontosabb a konzol, amely a default kimenetet jelenti. Tehát ha kiírunk egy szöveget a már látott módon, akkor azt itt láthatjuk majd.

A középső nagy terület a munkaterület, ahol a tényleges programozást végezhetjük. Ehhez természetesen meg kell nyitnunk egy fájlt, amiben dolgozhatunk.

Eclipse felépítése

Új programot általában új projektben szoktunk készíteni. Két ugyanolyan nevű projekt nem lehet egy workspace-en belül.

Új projekt - 1

Új projekt - 2

Ha van egy új projektünk, akkor a tényleges programozáshoz fájlokat kell készítenünk, amiben dolgozhatunk. Ezt jelen esetben úgy tehetjük, ha osztályokat hozunk létre az src mappán belül. Ha nem adunk meg csomagot, akkor az osztály a default package csomagba kerül, amely úgy tekinthető, hogy egyszerűen az src mappában van. Egy csomagban csak egy ugyanolyan nevű osztály létezhet.

Új osztály - 1

Új osztály - 2

Ha bepipáljuk a main függvény generálását, akkor rögtön futtatható osztályt generálunk. Ebből csupán egy sor hozzáadásával készíthető Hello World program. Az Eclipse további segítséget is nyújt, Ctrl + Space billentyűkombinációval automatikusan ki is egészíti megkezdett parancsainkat vagy neveinket.

Futtatni a felső eszköztáron található kis zöld körrel, illetve Ctrl + F11 billentyűkombinációval tudunk.

Program futtatása

Amennyiben valami hibát vétünk, a futtatás nem lehetséges. Ezt már korábban is láthatjuk, mivel az Eclipse piros aláhúzással jelzi a hibásan írt neveket, illetve az egyéb hibákat: pl. hiányzó pontosvessző. Ha hosszabb kódunk van, segítséget nyújthatnak a hibák megtalálásában az oldalt elhelyezett piros jelek, amelyekre kattintva a hibás kódrészre ugorhatunk.

Szintaktikai hiba

Ha nem szintaktikai hibát vétünk, viszont valami egyéb olyan műveletet végzünk, amely az Eclipse szerint nagy valószínűséggel helytelen vagy értelmetlen, akkor ezt sárga aláhúzással jelzi. Ettől még tudjuk futtatni a programot, de az ilyen eseteket érdemes átvizsgálni. Ilyenek lehetnek: felesleges változók (amiket létrehozunk, de nem használjuk semmire), halott kódrészletek (olyan kódrészletek, amelyek nyilvánvalóan nem fognak sosem lefutni, lásd a példákat).

boolean igaz = true;
if (igaz) {
    // mukodes
} else {
    // halott kod
}

Példa halott kódra.

public static int add(int a, int b) {
    return a+b;
    System.out.println("Ez egy halott kodreszlet.");
}

Példa halott kódra.

A képen azért panaszkodik az Eclipse, mert a deklarált változóval nem csináltunk semmit, tehát feleslegesnek ítéli.

Warning

Online fejlesztői eszközök

Manapság már számos online fejlesztői eszköz közül válogathatunk, amelyek eltérő lehetőségeket, funkciókat kínálnak. Ezek használata hasznos lehet, ha esetleg vendégségben vagyunk vagy olyan számítógép előtt ülünk, ahol nincs Java és nem is telepíthetünk (pl.: nincs adminisztrátori jogosultságunk), esetleg gyorsan, akár tabletről, telefonról szeretnénk egy kódot kipróbálni. Néhány online fejlesztőkörnyezet, melyből válogathatunk: IdeOne, CompileJava, TutorialsPoint Java compiler, CodeChef, Browxy, JDoodle. Otthoni, mindennapos használatra azonban nem javasoljuk őket, mert ezek az eszközök számos limitációval rendelkezhetnek.

Feladatok

  1. Írj egy programot, ami százszor kiír egy tetszőleges szöveget, valamint azt, hogy hányadiknál jár éppen!
  2. Írj egy programot, ami kiírja a parancssori argumentumokat, és azok számát!

Kapcsolódó linkek

Java 11 API

Részletes leírás a javadocról

A gyakorlat anyaga

Az UML modellezés alapjait nézzük meg, bővebben az UML osztálydiagrammal foglalkozunk. Ez a gyakorlati oldal csak vázlatszerűen tárgyalja a témát, az előadáson (és az előadásanyagban) ennél jóval részletesebb tananyag áll rendelkezésre. Az előadás anyaga elérhető a /pub/Programozas-I/nappali/eloadas/ útvonalon. Az előadáson kívül érdemes lehet megnézni Tarczali Tünde: UML diagramok a gyakorlatban című jegyzetét, illetve további kapcsolódó anyagok találhatóak a Kapcsolódó anyagok menüpontban. Az UML-ről egy általános összefoglalót találhatunk a Rendszerfejlesztés II. kurzus tananyagában, amely elérhető a /n/pub/Rendszerfejlesztes-I/gyakorlat/nappali/05/rf-uml.ppt oldalán

Alapok

  • UML - Unified Modeling Language (Egységesített Modellező Nyelv)
  • Hivatalos oldal, amelyen elérhető a nyelv teljes specifikációja és dokumentációja
  • Wikipédia leírás az UML-ről magyar, illetve angol nyelven
  • Előnyei
    • Nyílt szabvány
    • A szoftverfejlesztés ciklusainak mindegyikét támogatja
    • Hatalmas tapasztalati tudásra épít
    • Sok eszköz és sok cég támogatja, fejleszti a szabványt
  • Használhatjuk szoftverrendszer elemeinek
    • vizualizálására
    • specifikálására
    • létrehozására
    • dokumentálására
  • Modell: egy teljes rendszer leírása
  • Diagram: a rendszer egy részének, valamely szemszögből való vizuális leírása
  • Két nagy részre bontható alapvetően
    • Statikus modellek, például:
      • Osztálydiagram, leírás
      • Objektumdiagram
      • Csomagdiagram
      • Komponensdiagram
    • Dinamikus modellek, például:
      • Állapotdiagram
      • Szekvenciadiagram
      • Használati eset (use case) diagram

Az objektum

Az objektum egy entitás ábrázolása (ez lehet valós - lámpa, autó - vagy pedig elvont - matematikai függvény, zombi - amely rendelkezik állapottal, viselkedéssel, identitással.

Állapot

Egy az objektum lehetséges létezési lehetőségei közül (a tulajdonságok aktuális értéke által meghatározva). Ez időben változó lehet, pl.: egy lámpa ami ki van kapcsolva, egy későbbi időpontban be lehet kapcsolva.

Egy programban ez gyakorlatilag változókat fog jelenteni, amelyek valamely típusbeli konkrét értékkel rendelkeznek (pl.: egy lámpa objektum aktuális tulajdonsága egy boolean típusú változó, amely True vagy False értékeket vehet fel, és ez jelöli azt, hogy az adott lámpa be van-e kapcsolva; egy autó objektum egy tulajdonsága lehet, hogy éppen mekkora sebességgel halad, amelyet reprezentálhatunk egy int típusú változóval, és adott autó konkrétan az int értéktartományon belül egy adott értékkel halad, amely természetesen változhat, és jellemzően változik is.

Viselkedés

Az objektum viselkedése annak leírása, hogy az objektum hogy reagál más objektumok kéréseire. Az objektum kérésre csinál valamit, ami akár az állapotát is megváltoztathatja.

Egy programban ez gyakorlatilag metódusokat fog jelenteni, pl.: lámpa objektum bekapcsol(), kikapcsol() nevű metódusai, melyek megváltoztatják az állapotát; autó objektum gyorsit(), lassit() nevű metódusai, melyek a pillanatnyi sebességet változtatják meg.

Identitás

Minden objektum egyedi, még akkor is, ha éppen ugyanabban az állapotban vannak, és ugyanolyan viselkedést képesek megvalósítani.

Ez gyakorlatilag azt jelenti, hogy hiába van két, azonos gyártó által gyártott, ugyanolyan típusú, színű autó objektum, melyek pillanatnyilag éppen ugyanakkora sebességgel haladnak, ez a két autó objektum akkor is különböző.

Osztályok

Fogalma

Az osztály gyakorlatilag egy adott objektumcsoport "formai" leírása. Egészen konkrétan objektumok csoportjának leírása, amelyeknek közösek az attribútumaik, operációik, más objektumokkal való kapcsolataik és szemantikus viselkedésük. Az osztály egy adott objektum típusát jelenti. Az osztályokat csoportosíthatjuk valamilyen logika szerint, akár hierarchikusan, csomagokba.

Megjegyzés

Az osztály egy adott objektum típusa, azaz az objektum egy osztály példánya. Van egy konkrét autó objektumunk, amelyet a Toyota gyártott, Corolla típusú, fekete színű és éppen 46 km/h-val halad. Ez pontosan egy osztály példánya lehet, jelen esetben az autó osztály példánya. Az autó osztály tárolja, hogy ki gyártotta (szöveges), milyen típusú (szöveges), milyen színű (szöveges), és éppen mennyivel halad (egész).

Osztálydiagram - class diagram

Az osztálydiagram az osztályoknak és azok kapcsolatainak összefoglaló diagramja. Az osztályok csomagokba kerülhetnek itt is. Ez a diagramtípus az egyik legalapvetőbb, és legtöbbet használt diagramtípus, amellyel modellezhetjük az osztályainkat, és az azok között lévő kapcsolatokat. Az osztálydiagramokról bővebben az előadáson esett szó, illetve olvashatunk ezen és ezen a linken.

UML osztálydiagram elemei

Egy UML osztálydiagram elemei az osztályok, és az osztályok közötti kapcsolatok.

Osztály

A kabinet modellje

Az osztály jele a téglalap. A téglalapnak 3 része van: a felső részbe írjuk az osztály nevét, a középső részbe kerülnek az osztályhoz tartozó adattagok, általában típusmegjelöléssel. A nagy téglalap alsó részébe kerülnek az osztályhoz tartozó metódusok.

Kapcsolatok

Objektum-kölcsönhatásokat valósítanak meg. Alapvető kapcsolatok osztályok között: asszociáció, aggregáció (gyenge, erős), öröklődés. Ezen kapcsolatoknak különböző tulajdonságai lehetnek (név, irány, szerep, multiplicitás, stb).

Asszociáció

Osztályok közötti kétirányú összeköttetés, megadható az iránya (az üzenet iránya). A kapcsolatban résztvevő osztályok léte egymástól általában független, de legalább az egyik ismeri és/vagy használja a másikat. Gyakorlatilag az osztályokból létrejövő objektumok között van összefüggés.

Jele: a két osztály között húzott vonal, adott esetben nyíllal valamelyik végén.

Asszociáció

Az asszociáció tulajdonságát az asszociációhoz húzott szaggatott vonallal jelölhetjük, ahogy az a fenti példán is látható. A fenti példán a Személy és a Lakás közötti kapcsolatnak van egy Lakik tulajdonsága.

Aggregáció

Az aggregáció egy rész-egész kapcsolatot jelent, az asszociáció egy speciális, erősebb formája. Az egyik objektum fizikailag is tartalmazza, vagy birtokolja a másikat, mégpedig úgy, hogy a rész-objektum(ok) létezése az egész-objektumtól függ.

Jele: a két osztály között húzott vonal, egy rombusszal a tartalmazó oldalán

Gyenge aggregáció

Egy speciális asszociáció, amelynél a tartalmazó létezhet a tartalmazott nélkül is, pl.: alma és kukac.

Jele: a két osztály között húzott vonal, egy üres rombusszal a tartalmazó oldalán

Példa gyenge aggregációra

Erős aggregáció - kompozíció

Ez egy erősebb fizikai tartalmazás, itt a részek élettartama szigorúan megegyezik az egészével, pl.: ember-fej, lakás-gerendaszerkezet.

Jele: a két osztály között húzott vonal, egy teli rombusszal a tartalmazó oldalán

Példa kompozícióra

Öröklődés

Egy olyan osztályok közötti kapcsolat, ahol az egyik osztály megosztja a struktúráját és/vagy viselkedését egy vagy több másik osztállyal. Öröklődéssel egy egész hierarchiát készíthetünk, a származtatott osztály örököl az ősosztály(ok)tól. Ez az újrafelhasználhatóság egyik alapeszköze. Az öröklődés relációnak nincs neve, multiplicitása.

Öröklődés során az attribútumokat (egy programban gyakorlatilag tagváltozókat) és operációkat a lehető legfelső szinten definiálni kell.

A származtatott (gyerek) osztály mindent örököl az őstől (attribútumokat, viselkedést, kapcsolatokat is), és kiegészítheti ezeket sajátokkal.

A származtatott osztály egy örökölt operációnak saját implementációt is adhat. Ezt nevezzük felüldefiniálásnak (overriding), ez a polimorfizmus alapja.

A tipikus öröklődési szintek száma (ős-gyerek viszony) 3-5 körül szokott lenni.

Példa öröklődésre

Többszörös öröklődés

Előfordulhat, hogy egy osztály nem csak egy, hanem több ősosztálytól is örököl, azaz az összes ősének az összes tulajdonságát és operációját megörökli, ezt nevezzük többszörös öröklődésnek. Ezzel azonban érdemes vigyázni, hiszen ha egy osztály sok másik osztályból öröklődik közvetlenül, akkor az osztály könnyen átláthatatlanná, kezelhetetlenné válhat.

Példa többszörös öröklődésre

Megjegyzés

A legtöbb objektum-orientált nyelvben, így Java-ban, és C#-ban sincs többszörös öröklődés, de pl. a C++, Python nyelvekben van.

Eszközök

Gyakorlati példák

Kutyás példa

A kabinet modellje Az Irinyi kabinet modellje

Feladatok

  1. Modellezd a bankkártyás fizetést! A modellben szerepeljenek a következő osztályok, valamint a közöttük lévő kapcsolatok: megoldás első, második
    • Bank
    • Számla
    • Személy
    • Kártya
    • Terminál ( kétfajta: automata és POS )

Kapcsolódó linkek

Practical UML

UML 2 Class Diagrams