Making Generaliseringer i UML 2

December 6  by Eliza

Det er naturlig å klassifisere objekter i kategorier, og å organisere kategorier i underkategorier. Hvis du ser etter et sted å bo, finner du deg selv å kategorisere en boenhet som et hus, leilighet, rekkehus, borettslag, herskapshus, og så videre. Husene kan i sin tur bli ytterligere organisert av stiler som ranch, split-nivå, kolonial, og saltbox. UML gir deg med notasjon for å fange opp disse typer klassifisering - også kjent som generalisering og spesialisering - og gjøre bruk av dem som en modeler og en programmerer.

Noen objektorienterte utviklere vil gå langt for å spare litt arbeid. Når de kan modellere noe en gang og bruke det, de er interessert. Hvis de kan skrive en metode (programkode for en operasjon) for en klasse bare en gang og bruke det mange ganger, og deretter registrere dem opp for høyere produktivitet. Hvis du ønsker å spare tid ved å angi attributter og operasjoner gang og deretter gjenbruke dem mange ganger, les videre.

Som du definere klasser, kan det hende at noen klasser har de samme attributtene eller de samme operasjonene. Når dette er tilfelle, du plassere disse fellestrekk (attributter, operasjoner, og så videre) i en mer generisk klasse kalt superklassen. Klassene som deler de vanlige funksjonene er kjent som underklasser av superklassen. For eksempel lengden på innspilt materiale på et videobånd, lydbånd, CD, eller film film er en egenskap av alle fire kindsof innspilte opptak. Disse klassene kan dele andre attributter i tillegg, slik som deres fysiske dimensjoner og dato hver og en ble brukt til å gjøre et opptak. I dette tilfellet super ville være RecordedMedia, subklassene ville være videobånd, lydbånd, Compact Disc-, og MovieFilm, og noen felles attributter kan inkludere recordedLength og totalLength.

Denne prosessen med å finne lignende attributter eller operasjoner over klasser er kjent som generalisering. For eksempel kan du general attributtet recordLength inn i en mer generisk klasse kalt RecordedMedia. Fremgangsmåten for å vise en generalisering i UML er enkel:

1. Identifiser subklasser.

Finn klasser som har de samme attributtene og / eller operasjoner. Disse klassene er dine underklasser.

2. Lag en superklasse.

Gi en super å holde felles attributter og / eller drift av subklasser. Gi super et navn som kategoriserer alle underklasser. Plassere super ovenfor subklassene i diagrammet gjøre det lettere å lese, men er ikke nødvendig.)

3. Legg fellestrekk til superklassen.

Fjern de felles attributter og operasjoner fra subklassene og plassere dem (en gang) i superklassen.

4. Tegn en generalisering forholdet.

Du tegner en generalisering linje fra hver underklasse til superklassen. I UML generalisering linjen er representert som en heltrukken linje med en hul pilhode ved super ende. I UML, er en linje med den hule pilspiss som forbinder en underklasse til en baseklasse kjent som en generalisering forhold.

Når du har opprettet en superklasse med de vanlige funksjonene som attributter og operasjoner, subklassene arve disse funksjonene fra superklassen. På denne måten trenger du bare å skrive de vanlige funksjonene en gang i superklassen i stedet for mange ganger i hver av underklassene.

Du kan fortelle om du har en generalisering ved å se på det språket du (eller andre) bruker for å beskrive forholdet mellom klassene. Legg merke til at i å beskrive innspilt media og de forskjellige typer som videobånd tidligere i denne delen, uttrykket "fire kindsof innspilte opptak" dukket opp. Hvis du finner deg selv å bruke uttrykk som "slags" eller "type", så sjansene er du har en generalisering på hendene.

Si at en av dine kunder er opptatt av å holde styr på materialer i et arkiv. Denne klienten har samlet ulike typer innspilte medier som videobånd og audiotapes. Som modellbyggere, må du fange forskjellene mellom disse mediene så vel som deres likheter. Diagrammet i Figur 1 viser begynnelsen av flere gener, arrangert i et hierarki arv.

Making Generaliseringer i UML 2

Figur 1: Enkel arv hierarki.

Utviklere bruker begrepet generalisering eller arv å referere til det samme konseptet av gjenbruk delte attributter og operasjoner som du viser i en superklasse og brukes på nytt i underklasser. Generalisering refererer til begrepet generalisering fra detaljene (subklassene) til den generiske (superklassen). Arv refererer til effekten av generalisering på underklasser.

Når du ser en generalisering forholdet mellom klasser, er dens mening svært forskjellig fra den i et tilknytningsforhold mellom klassene. En forening er i siste instans et forhold blant mange gjenstander - noen tilfeller av én klasse har et forhold (link) med forekomster av annen klasse. I en generalisering forholdet mellom klasser, er forholdet egentlig om klassene. Det beste du kan si er at et objekt skapt fra en underklasse inneholder alle funksjonene i underklassen og i superklassen.

Du har bare ett objekt fra en klasse i en generalisering forholdet. Selv om du viser to klasser, underklasse og super, du har bare ett objekt som blir opprettet. Man kan tenke på et objekt av klassen videobånd også være et mål for den RecordedMedia klasse på grunn av arv. Figur 2 viser et objekt skapt fra Videotape klasse med alle sine attributter. (The forekomst av en klasse er representert som et objekt symbol.) Du trenger ikke to forskjellige objekter (ett for RecordedMedia og én for Videotape), bare ett objekt. Når objektet vtu83-1023 ble opprettet, ble alle sine attributter verdier satt. Opptaket på båndet er 57 minutter. Den totale lengden på den fysiske båndet er 60 minutter. Tapen er en Umatic videokassett med en høyde på 10 inches, en bredde på 7 inches, og en dybde på 1,5 inches. Innspillingen er analog, og en logg over innholdet på kassetten er festet til tape for arkivar referere til.

Making Generaliseringer i UML 2

Figur 2: Et eksempel som viser alle arvede attributter.

Du har bare ett eksempel definert av en underklasse og dens superklasse. Underklassen og super kan ha en konstruktør drift (for å skape eksempel), og en destructor drift (for å ødelegge eksempel). Når programvaren kjører, og du oppretter en forekomst av en underklasse, er konstruktøren av superklassen kjøres først, etterfulgt av konstruktøren av underklassen. Når det gjelder tid til å eliminere forekomsten du opprettet, er destructor av underklassen ringte først, etterfulgt av destructor av superklassen. Hvis ting er mer komplisert fordi du har underklasser av underklasser, bare husk: Constructors påkalles fra toppen av arvehierarkiet til bunnen; destructors kalles i rekkefølge fra laveste underklasse opp til det høyeste superklassen.