„4. OO metrikák (2012)” változatai közötti eltérés
Új oldal, tartalma: „__TOC__ ==Tervezési elvek== ===Csatolás=== * függőségek minimalizálása package, osztály és objektum szinten * D(ARP)C = Direct (Attribute, Reference, Paramete…” |
|||
21. sor: | 21. sor: | ||
===Kohézió=== | ===Kohézió=== | ||
* Egy egységbe (modul, osztály, blokk) tartozó elemek közötti kapcsolat erőssége. | * Egy egységbe (modul, osztály, blokk) tartozó elemek közötti kapcsolat erőssége. | ||
* Modulokban: | * Modulokban: funkcionális, szekvenciális, kommunikációs, procedurális, temporális, logikai, esetleges | ||
információs: | információs: | ||
funkcionális: A modul egyetlen jól definiált célt szolgál. Ideális. pl:sqrt() | 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 | 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..." | 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. | 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. | logikai: A modul műveletei között csak logikai kapcsolat van. | ||
eseti: | eseti: | ||
* |P|| = {(Ai,Aj) Ai metszet Aj = 0} függvények száma, nincs közös attribútum, | * |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 | * |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. | * LCOM = |P|| - ||Q (ha az eredmény pozitív), különben 0. | ||
===Egyéb=== | ===Egyéb=== | ||
* CC = Cyclomatic Complexity: metódus bonyolultsága | * CC = Cyclomatic Complexity: metódus bonyolultsága |
A lap 2012. december 16., 19:57-kori változata
Tervezési elvek
Csatolás
- függőségek minimalizálása package, osztály és objektum szinten
- 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: funkcionális, szekvenciális, kommunikációs, procedurális, temporális, logikai, esetleges
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)
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
CDP
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ó
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
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)
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.
--Szabó Csaba (vita) 2012. december 16., 19:54 (CET)