Sammensetning og rekursiv OCL

Denne artikkelen viser et enkelt eksempel på bruk av recusive OCL innenfor et sammensatt mønster https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772
". For å forstå rekursjon må vi først forstå rekursjon " [Kilde ukjent]
Sikkert det ikke er en profesjonell programmerer der ute som ikke har brukt rekursjon? Jeg vil satse på at den første rekursiv rutine at de fleste av disse programmerere skrev var en slags FindAllFiles rutine https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Det fine med rekursjon er at det er så enkelt, men resultatene gir en illusjon av at koden må være langt mer komplisert https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.
Jeg langsomt omskriving wwwhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.HowToDoThingshttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.com i min veldig lite tid til overs https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Før kategorisering av artikler var tre nivåer dypt, ikke mer og ikke mindre; Emne- > Category- > Underkategori https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. En av forbedringene jeg har besluttet å legge til nettstedet er muligheten til å hekke en ubegrenset mengde nivåer https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. For å gjøre dette har jeg gjennomført en ganske grunnleggende OOP sammensatt mønster som så
A " BaseCategory " er en abstrakt klasse, er det bare mål i livet er å ha et navn, og å eie underkategorier https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. A " Underkategori " eksisterer for å egne artikler og flere underkategorier https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. A " MainCategory " holder et bilde for hovedsiden, og eier underkategorier https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Kategorisering min kan nå bestå av minimum to nivåer (MainCategory- > Underkategori), eller så mange nivåer som jeg liker https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772
Neste, i modellens base klassen jeg implementert. en avledet attributt kalt " Displayname: String " https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Dette attributtet ble opprinnelig lagt slik at jeg kunne bruke en enkelt nettside confirmdelete https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.aspx å vise navnet på objektet brukeren ønsker å slette (dette vil vanligvis være en artikkel, men jeg kan bruke den til noe objekt i det hele tatt) https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Koden for dette attributtet er som følger
offentlig streng DisplayNameDeriveAndSubscribe (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber) product: {
IOclService OCL = (IOclService) thishttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.AsIObject()https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772. ServiceProviderhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.GetEcoService(typeof(IOclService));
avkastning (string) OCL https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.EvaluateAndSubscribe (dette https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.AsIObject (), " selv https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772 .asString ", reEvaluateSubscriber, resubscribeSubscriber)https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.AsObject;
}
It bare evaluerer " selv https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.asString". mot den gjeldende forekomsten https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772 Dette har den effekten av å evaluere DefaultStringRepresentation OCL uttrykk inngikk i modellen og returnere den som en streng https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772 BaseCategory har sin DefaultStringRepresentation satt til ". navn ". https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772
Nå her er hvor rekursjon kommer inn det https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772 Da jeg gikk inn i en ny Underkategori det ikke ta lang tid å innse at ". ASP https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.NET" fortalte meg ingenting om . hvor i kategorisering struktur jobbet jeg https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772 Ville det ikke vært fint om stedet for bare å se " ASP https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.NET" Jeg vil faktisk se " datamaskiner-> programmering-> Delphi 2005- > ASP https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.NET"? Så det er hva jeg gjorde, og det fine er at det ikke tar en eneste linje med kode for å regne ut den veien, fordi jeg brukte en veldig enkel rekursiv OCL uttrykk https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.
Jeg har lagt en ny " Sti: String " attributt til underkategorien klassen, satt Avledet til True, og deretter sette Derivation OCL til "parentCategoryhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.displayName"https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772. Husk at Display vil bare returnere Standard String Representasjon, så i dette tilfellet underkategorien https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.Path er nettopp tilbake Display av sine foreldre https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Dette er ikke noe bruk i det hele tatt, helt til du endrer standard String Representasjon også, som sohttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.https://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.
parentCategoryhttps://computer.sciencearticles.cc/no/UploadFiles_9560/201512/2015120416471772.asString + '- ≫' + Navn
Display av noen kategori er dets foreldres Standard String Representasjon + en separator + eget navn https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Hva er dens foreldrenes Standard String Representasjon? Vel, hvis foreldrene er en MainCategory deretter uttrykket " navn " brukes, men hvis foreldrene er også en underkategori deretter uttrykket " parentCategory https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.asString + '- >' + Navn " brukes -. hele veien opp til vi når MainCategory https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772
Ikke bare gjør dette gi meg en meget informativ Sti attributt, men som en svært hyggelig etter produkt, det gir også meg hele banen + navn i confirmdelete https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772.aspx webskjema når jeg prøver å slette en underkategori objekt https://computer.sciencearticles.cc/no/ {$ UploadDir} /201512/2015120416471772. Anmeldelser



Previous:
Next Page: