6. OO metrikák
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.