6. OO metrikák

A VIK Wikiből
A lap korábbi változatát látod, amilyen Unknown user (vitalap) 2012. október 21., 21:43-kor történt szerkesztése után volt. (Új oldal, tartalma: „{{GlobalTemplate|Infoszak|OotOOMetrikak}} __TOC__ ==6.1. Tervezési elvek== ===Csatolás=== * függőségek minimalizálása * package, osztály, objektum * D(ARP)C = …”)
(eltér) ← Régebbi változat | Aktuális változat (eltér) | Újabb változat→ (eltér)

Ez az oldal a korábbi SCH wikiről lett áthozva.

Ha úgy érzed, hogy bármilyen formázási vagy tartalmi probléma van vele, akkor, kérlek, javíts rajta egy rövid szerkesztéssel!

Ha nem tudod, hogyan indulj el, olvasd el a migrálási útmutatót.


6.1. Tervezési elvek

Csatolás

  • függőségek minimalizálása
  • package, osztály, objektum
  • D(ARP)C = Direct (Attribute, Reference, Parameter) Based Coupling

Azon különbözo osztályok száma, amelyeknek attribútumát, metódusát paraméterként érjük el

  • DCC = Direct Class Coupling

Azon osztályok száma, amikhez egy A osztály attributum deklaracioin keresztul, vagy az A metodusainak parameterlistain keresztul csatolva van.

  • CBO = Coupling Between Objects

A csatolt osztalyok szamat veszi, ahol a vizsgalt osztaly akkor szamit csatolt osztalynak egy masik osztalyhoz, ha hasznalja annak attributumat, VAGY metodusat.

  • Instability (RMI) = kimenő_csatolás / (bejövő_csatolás + kimenő_csatolás)

Osztály csatolás

  • NUCD = Number of used classes by dependency relation
  • TNUCD = Total number of evidences for Used classes by dependency relation
  • RNUCD = NUCD / TNUCD
  • öröklés: mélysége, gyerekek száma
  • asszociáció: NAC = Number of associated classes with a class
  • TACU = Total associated class Usages

Kohézió

  • Egy egységbe (modul, osztály, blokk) tartozó elemek közötti kapcsolat erőssége.
  • Modulokban: információs, funkcionális, kommunikációs, procedurális, időbeli, logikai, eseti

információs:
funkcionális: A modul egyetlen jól definiált célt szolgál. Ideális. pl:sqrt();
kommunikációs: A modulhoz tartozó műveletek azonos adatokkal dolgoznak. "Ha már lekérdeztük az adatot akkor ellenőrizzük rajta ... is" - filozófia
procedurális: A modul által végrehajtott műveletek egymás után következnek. "Nyomtató beállítása, nyomtatás..."
temporális: A modul által végrehajtott műveletek egyszerre elvégezhetőek. "Fájl lezárás, hiba-log írás, hiba képernyőre írás" - téma azonos, sorrend mindegy.
logikai: A modul műveletei között csak logikai kapcsolat van.
eseti:

  • |P|| = {(Ai,Aj) Ai metszet Aj = 0} függvények száma, nincs közös attribútum,
  • |Q|| = {(Ai,Aj) Ai metszet Aj <> 0} függvények száma, közös attribútummal
  • LCOM = |P|| - ||Q (ha az eredmény pozitív), különben 0.

Egyéb

  • CC = Cyclomatic Complexity: metódus bonyolultsága
  • WMC = Weighted methods per class = \x{2211} CC (minden metódusra)
  • RFC = Response for a class: metódusok száma
  • RMA = Abstractness: absztrakt / nem absztrakt (package)

6.2. Cocomo

Effort

  • Effort = 2.94 * EAF * (KSLOC)E
  • Effort (PersonMonth, PM)
  • EAF = Effort Adjustment Factor
  • KSLOC = kilo source LOC
  • E = exponens

Duration

  • Duration = 3,67 * (Effort)SE
  • Duration - (PM-ben)
  • Effort (PersonMonth, PM)
  • SE = schedule equation exponent

6.3. CDP

6.3.1. Locking minták

Lock

  • probléma: biztonságos lock felszabadítás
  • megoldás: saját guard osztály

Double check

  • egymásba ágyazott dupla ellenőrzés
  • prob: vagy nem tudunk singletont impl, vagy nem hatékony, vagy compiler nem tudja kioptimalizálni

Thread-safe lock

  • prob: komponensen belülről és kívülről is egyaránt használható legyen. Cél:holtpont elkerülése, hatékonyság
  • mo: két interfész: külső ellenőriz, belső (privát) elfogad

Bedrótozott lock

  • mo: run-time szinkronizáció

6.3.2. Konkurencia minták

Monitor objektum

  • több kliens esetén
  • mo: minden objektumnak van monitora + várakozási sora (lásd Objektum): synchronized blokk

Aktív objektum

  • metódushívás nem blokkolhat
  • mo: hívás és végrehajtás szétcsatolása, végrehajtás saját szálon (kell valami üzenetsor)

Reactor

  • 1 szerver, több kliens
  • mo: szinkron események demultiplexelése

Vezető-követő

  • események konkurrensen
  • mo: szálcsokor, szinkron események demultiplexelése

6.3.3. Esemény minták

Proactor

  • mint a Reactor, csak itt esemény
  • mo: mint a Reactor (szinkron események demultiplexelése)

Csatlakozó (acceptor-connector)

  • összefonódik a kapcsolódás és kommunikáció
  • mo: külön szedni (szinkron vagy aszinkron kapcsolódás)

6.4. Visitor Combinator

  • Sequence(Identity, v) = v
  • Sequence(v, Identity) = v
  • Sequence(Fail, v) = Fail
  • Sequence(v, Fail) = Fail //ha v -nek nincs mellékhetása
  • Choice(Fail, v) = v
  • Choice(v, Fail) = v
  • Choice(Identity, v) = Identity
  • Try(v) = Choice(v, Identity)
  • IfZeroAddOne = Try(Sequence(IsZero, AddOne))

-- MeszegetoBalazsIstvan - 2008.05.27.

-- Velias - 2009.05.27.

-- Ciana - 2010.05.31

-- Csádám - 2010.05.31.