Kihagyás

Gyűjtemények felsorolása, algoritmus minták

Gyűjtemény és feldolgozása

A gyűjtemény egy olyan objektum, amely elemek tárolására alkalmas

Akkor virtuális, ha nem kell explicit módon eltárolni az elemeit.

Egy gyűjtemény feldolgozásán az elemek feldolgozását értjük.

Felsorolás

A feldolgozáshoz szükség van felsorolásra - Enumerátor viselkedésre

A bejárásra (enumerációra) használható műveletek

  • First()
    • Rááll al első elemre
    • Elkezdi a felsorolást
  • Next()
    • Rááll a következő elemre
    • Folytatja a felsorolást
  • Current()
    • Visszaadja az aktuális elemet
    • Identity függvény
  • End()
    • Jelzi, hogy a végén vagyunk-e

Jónak hangz__IK__ a felsorolást a gyűjtemény metódusaival megvalósítani, viszont ez ellene megy a egyszeres felelősség elvével

Érdemes felsoroló objektummal csinálni, ami rendelkezik a First(), Next(), Current(), End(). Az E-beli elemeket felsoroló objektum jelölése enor(E)

Előnye, hogy ugyanazon a gyűjteményen egyszerre több felsorolás is folyhat egymástól függetlenül

Felsorolók osztálya

  • Reprezentációja mindig tartalmaz egy hivatkozást a gyűjteményre
  • Implementációja a gyűjtemény getter-eire támaszkodik
  • A felsorolót a gyűjtemény hozza létre
    • A gyűjtemény így értesül arról, hogy felsorolják

Felsorolók osztálya


Felsoroló és gyűjtemény közti kommunmikáció

Felsorolás állapotai

  • Indulásra kész
  • Folyamatban
  • Befejeződött

Felsorolás - Példa

Intervallum klasszikus felsorolója

Vektor klasszikus felsorolója

Algoritmus minták általánosítása

Összegzés általánosítása

Számlálás általánosítása

Maximum kiválasztás általánosítása

Kiválasztás általánosítása

Lineáris keresés általánosítása

Optimista lineáris keresés általánosítása

Feltételes maximum általánosítása 1

Feltételes maximum általánosítása 2


Visszavezetés

  • Megsejtjük a feladatot megoldó algoritmus-mintát (feladat-algoritmus párt)
  • Specifikáljuk a feladatot és az algoritmus-minta közötti eltéréseket
    • Felsoroló és felsorolt elemek konkrét típusát
    • Függvények aktuális megfelelőit
    • H halmaz műveletét, ha van ilyen
    • A változók átnevezéseit
  • A különbségek felírásával megkapjuk a feladatot megoldó algoritmust

Tétel:

Ha egy feladat és egy algoritmus-minta feladata megfeleltethetők egymásnak, akkor az algoritmus-minta algoritmusának ezen megfeleltetés szerint átalakított változata megoldja a kitűzött feladatot

Tesztelési stratégiák

Fekete ||Doboz||

A feladat specifikációja alapján felírt tesztesetek

  • Érvényes tesztadatok
    • Az előfeltételt kielégítő
  • Érvénytelen tesztadatok
    • Az előfeltételt megszegő
  • Az utófeltétel alapján generált tesztesetek

Fehér ||Doboz||

A kód alapján felírt tesztesetek

  • Az algoritmus minden utasításának kipróbálása
  • Az algoritmus mionden vezérlési csomópontjának kipróbálása

Szürke ||Doboz||

Végrehajtható specifikáció által elővetített algoritmus működését ellenőrző tesztesetek

  • Algoritmus-mintából származik, így azok elemei itt is érvényesek!

Algoritmus-minták tesztesetei

Algoritmus minták tesztesetei

Algoritmus tesztek