Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Definicija zavisnosti

4.Dependency definition fajl

Classicle-ov Dependency Checker koristi dependency definition fajl (tip fajla .ddf) da bi mogao da proveri neželjene dependency. Dependency definition fajlovi su tekstualni fajlovi (sadrže sintaksu čije se objašnjenje nalazi u daljem tekstu) koji definišu skup klasa i nezavisan odnosa između njih. Ovi odnosi se proveravaju i prijavljuju ukoliko su neuspešni.

4.1 Primer

Sledeće je primer fajla koji sadrži sve vrste komandi:

#
# Ovo je primer dependency definition fajla
#
show allResults

{package} = classycle

[util] = ${package}.util.*
[non-util] = ${package}.* excluding [util]
[class-file] = ${package}.classfile.*

check sets [util] [non-util] [class-file]

check [util] independentOf [non-util]
check [class-file] independentOf [util]
check ${package}.ant.* independentOf java.util.* java.awt.* \
                                     javax.swing.*

check absenceOfClassCycles > 1 in [util]
check absenceOfPackageCycles > 1 in ${package}.*

layer basic = [class-file] [util]
layer dependency = ${package}.dependency.*

check layeringOf basic dependency
Sa podrazumevanim rezultatom prikazivač čita izlaz:
show onlyShortestPaths allResults
Set [util] has 8 classes.
Set [non-util] has 78 classes.
Set [class-file] has 14 classes.
check [util] independentOf [non-util]   OK
check [class-file] independentOf [util] OK
check classycle.ant.* independentOf java.util.*
  Dependency nalazi:
  classycle.ant.ClassycleTask
    -> java.util.LinkedList
    -> java.util.ArrayList
    -> java.util.Iterator
  classycle.ant.ReportTask
    -> java.util.HashSet
  classycle.ant.DependencyCheckingTask
    -> java.util.Map
    -> java.util.Hashtable
    -> java.util.Properties
check classycle.ant.* independentOf java.awt.*  OK
check classycle.ant.* independentOf javax.swing.*       OK
check absenceOfClassCycles > 1 in [util]        OK
check absenceOfPackageCycles > 1 in classycle.*
  classycle.renderer et al. contains 2 packages:
    classycle.renderer
    classycle
check [class-file] directlyIndependentOf [util] OK
check [util] directlyIndependentOf [class-file] OK
check [class-file] directlyIndependentOf classycle.dependency.* OK
check [util] directlyIndependentOf classycle.dependency.*       OK

4.2 Sintaksa

4.2.1 Definicije

4.2.1.1 Property definicija

Sinopsis:
Daju definiciju za property koja može da se koristi u bilo kojoj narednoj liniji.
Sintaksa::
       {<property name>} = <any string>
<property name> je naziv property-a <any string> je bilo koji string koji nema razmake.

Property se upućju od strane:

       ${<property name>}
Semantic:
Property se može koristiti posle njihove definicije. Pre nego što se analizira linija u fajlu, prvo se reše sve moguće upute za property. Ukoliko se uputi nedefinisani property onda se dolazi do greške. Property može da se ponovo definiše.

U dependency definition fajl svaki sistemski property može biti dostupan kao default property. Oni mogu da se podese sa argumentum komandne linije Java VM.

       -D<property name>=<any string>

U slučaju da su ugrađene komande dependency definicije u DependencyCheckingTask onda definisani property u ant pismu budu dostupni kao default properties (pogledati primer u poglavlju1 1.2.2. ).

Napomena: Ponovo definasnje default properties ne menjaju ni originalne niti ant properties tog sistema.

4.2.1.2 Skup definicija

Sinopsis:
Definiše skup klasa.
Sintaksa:
       [<set name>] = <term>1..*
ili
       [<set name>] = <term>0..* excluding <term>1..* 
gde je <set name> jedinstveno ime skupa. Ne bi trebalo da sadrži '[', ']', ili razmak. <term> je ili skup označen svojim nazivom i zagradama ili univerzalni obrazac za potpuno kvalifikovano ime klase . Imajte na umu, da je samo karakter '*' dozvoljen kao univerzalni(džoker). Indeksi 1..* označavaju jedan ili više termina.
Semantic:
Svaki termin definiše skup klasa.Redosled termina označava ujedinjeni skup ovih uslova. excluding operacija označava pravljenje razlike skupa. Imajte na umu da skup može takođe da uključi spoljne klase.

4.2.1.3 Layer Definicija

Sinopsis:
Definiše layer kao skup klasa
Sintaksa:
       layer <layer name> = <term>1..*
<layer ime> je jedinstveni naziv za layer. Ne treba da sadrži beli razmake. <term> je naziv za set koji je definisan u set definition ili je wild-card obrazac.
Semantic:
Svaki poseban termin definiše skup klasa. Layer je skup takvih set-ova

4.2.2 Izjave

Sve izjave daju rezultat koji je dobar ili nije dobar

4.2.2.1 Set Display Preference

Sinopsis:
Definicija disaply preference.
Sintaksa:
       show <preference>
<preference> je prefence koji ResultRenderer koristi. Trenutno svaki ResultRenderers brinu o preference koji je kreiran u DefaultPreferenceFactory.
Semantic:
Display reference kontroliše izradu rezultata svih izjava nakon ove izjave. Rezultat ovog tipa izjave je uvek dobar.

4.2.2.2 Check Sets

Sinopsis:
Proverava da li je skupa klasa prazan ili nije.
Sintaksa:
       check sets <set>1..*
<set> je naziv za set koji je definisan u set definition ili je wild-card obrazac.
Semantic:
Proverava da li su određeni setovi prazni. Rezultat je dobar ukoliko svaki set sadrži bar jednu klasu.

Glavna svrha ove komande je da se saznaju pravopisne greške u set definiciji.

4.2.2.3 Check Cycles

Sinopsis:
Proverava da li je skupa klasa ima class/package cycle koji prelazi definisanu veličinu.
Sintaksa:
       check absenceOfClassCycles > <maximum size> in <set>
ili
       check absenceOfPackageCycles > <maximum size> in <set>
<maximum size> e maksimalni broj class/package-a (preciznije: jaka komponenta) koji je cycle dozvoljen da ima. Mora da bude pozitivan broj. <set> je naziv za set koji je definisan u set definiciji ili je wild-card obrazac.
Semantic:
Ako ne postoje cycles u navedenom setu koji prelaze maksimalnu veličinu, onda je rezultat dobar.

Imajte na umu da postoje jake komponente kojese možda ne mogu otkriti ukoliko su delimično pokriveni određenim set-om

4.2.2.4 Check Classes Dependency

Sinopsis:
Proverava da li je skup klasa zavisan /ili nezavisan od drugih skupova klasa.
Sintaksa:
       check <set>1..* independentOf <set>1..*
or
       check <set>1..* directlyIndependentOf <set>1..*
or
       check <set>1..* dependentOnlyOn <set>1..*
where <set> je naziv za set koji je definisan u set definition ili je wild-card obrazac..
Semantic:
  • independentOf/directlyIndependentOf: Proverava da li je path pronađen iz klase koja je definisani set u levoj grupi klase u odnosu na set iz desne grupe. Rezultat je dobar ako path nije pronađen. Operacija directlyIndependentOf vrši slabiju proveru: On samo traži direktne reference iz klasa sa levih set-ova prema klasama u desnim set-ovima. Ukoliko se pronađe dependency onda se subgraph uskladišti u rezultate.

    Ukoliko se grupa skupova označe sa leve ili desne strane, onda će izjava biti raspodeljenja na parove, gde će jedan set biti iz leve grupe i druga set iz desne grupe. Dakle originalna izjava gde je slovo ‘n’ za leve setove i ‘m’ za desne setove se množi.

  • dependentOnlyOn: proverava da li svaki set iz leve grupe zavisi samo od sebe ili zavisi od desne grupe kada se desi ujedinjenje svih setova. Dakle ova provera nije uspešna ako postoji klasa setova iz leve grupe koja zavisi od klase koja nije u definisanom setu niti u setu iz desne grupe

    Ako levi grupa ima više od jednog seta, onda će izjava će biti raspodeljenja na ‘n’ izjave, gde ‘n’ označava broj setova u levoj grupi. Svaka izjava proverava dependency samo jednog seta.

4.2.2.5 Check Layering

Sinopsis:
Proverava arhitekturu layering-a.
Sintaksa:
       check layeringOf <layer>1..*
or
       check strictLayeringOf <layer>1..*
<layer> označava ime layer koji je definisan layer definiciji.
Semantic:
Ovo je korisna izjava kada se proverava da li gomila slojeva prave layered arhitekturu. Left-most (right-most) layer je donji (gornji) layer. Izjava se pretvara u nekoliko izjava čiji gde je tip checking direct independency (directlyIndependentOf)za sledeće dependency nije dozvoljen: Između setova koji definišu layer
  • Između setova koji definišu layer
  • Od donjeg layer do gornjeg layer
  • Od gornjeg layer na layer koji se ne nalazi direktno ispod njega ukoliko se koristi strictLayeringOf .
Ovo je primer gde se pet setova organizuju u tri layers. Strelice pokazuju allowed direct dependency. Svi ostali direct dependencies su zabranjeni. Strelice sa crticom pokazuju zabranjene dependencies u slučaju strict layering.
Published (Last edited): 16-03-2013 , source: http://classycle.sourceforge.net/ddf.html