Video: Hvad er epilepsi? 2025
Det er naturligt at klassificere objekter i kategorier og til at organisere kategorier i underkategorier. Hvis du leder efter et sted at bo, finder du dig selv at kategorisere en bolig som hus, lejlighed, byhus, ejerlejlighed, palæ og så videre. Huse kan i sin tur organiseres yderligere af stilarter som ranch, split-level, koloniale og saltbox. UML giver dig besked om at indfange disse typer klassifikationer - også kendt som generalisering og specialisering - og gøre brug af dem som modeller og programmerer.
Nogle objektorienterede udviklere vil gå langt for at spare lidt arbejde. Når de kan modellere noget en gang og genbruge det, er de interesserede. Hvis de kan skrive en metode (programkoden til en operation) kun for en klasse en gang og bruge den mange gange, så tilmelde dem til højere produktivitet. Hvis du vil spare dig selv tid ved at angive attributter og operationer en gang og derefter genbruge dem mange gange, læs videre.
Når du definerer klasser, kan du bemærke, at nogle klasser har de samme attributter eller de samme operationer. Når dette er tilfældet placerer du disse fælles funktioner (attributter, operationer osv.) I en mere generisk klasse kaldet superklasse. Klasserne, der deler de fælles funktioner, kaldes underklasser af superklassen. For eksempel er længden af det optagede materiale på et videobånd, et lydbånd, en cd eller en filmfil en egenskab af alle fire typer optaget materiale. Disse klasser kan også dele andre attributter, såsom deres fysiske dimensioner og datoen hver enkelt blev brugt til at lave en optagelse. I dette tilfælde ville superclassen være OptagetMedia, subklasserne ville være Videobånd, Audiotape, CompactDisc og MovieFilm, og nogle delte attributter kunne indeholde recordedLength og totalLength.
Denne proces med at finde lignende attributter eller operationer på tværs af klasser er kendt som generalisering. For eksempel generaliserer du attributten recordLength til en mere generisk klasse kaldet RecordedMedia. Processen til at vise en generalisering i UML er enkel:
1. Identificer underklasserne.
Find klasser, der har de samme attributter og / eller operationer. Disse klasser er dine underklasser.
2. Opret en superklasse.
Giv en superklasse til at holde de fælles attributter og / eller operationer i underklasserne. Giv superklassen et navn, der kategoriserer alle underklasserne. Placering af superklassen over underklasserne i diagrammet gør det lettere at læse, men er ikke påkrævet.)
3. Tilføj fælles funktioner til superklassen.
Fjern de fælles attributter og operationer fra underklasserne og læg dem (en gang) i superklassen.
4. Tegn et generaliseringsforhold.
Du tegner en generaliseringslinje fra hver underklasse til superklassen. I UML er generaliseringslinjen repræsenteret som en solid linje med en hul pilhoved i superklasseenden. I UML er en linje med den hule pilhoved, der forbinder en underklasse til en superklasse, kendt som et generaliseringsforhold.
Når du har oprettet en superklasse med de fælles funktioner som attributter og operationer, er underklassen arve disse funktioner fra superklassen. På den måde må du kun skrive de fælles funktioner en gang i superklassen i stedet for mange gange i hver af underklasserne.
Du kan se om du har en generalisering ved at se på det sprog, du (eller andre) bruger til at beskrive forholdet mellem klasser. Bemærk, at udtrykket "fire slags optagede medier" fremkom ved at beskrive optaget medie og dets forskellige typer som videobånd tidligere i dette afsnit. Hvis du finder dig selv ved at bruge sætninger som "slags" eller "type", så er chancerne for en generalisering på dine hænder.
Sig, at en af dine kunder er bekymret for at holde styr på materialer i et arkiv. Denne klient har akkumuleret forskellige slags optagede medier som videobånd og lydbøger. Som modeller skal du fange forskellene mellem disse medier og deres ligheder. Diagrammet i figur 1 viser begyndelsen af flere generaliseringer, der er arrangeret i et arvshierarki.
Figur 1: Enkelt arvshierarki.
Udviklere bruger udtrykket generalisering eller arv til at henvise til det samme koncept om genbrug af delte attributter og operationer, som du viser i en superklasse og genbruges i underklasser. Generalisering refererer til begrebet generalisering fra specifikationer (underklasserne) til den generiske (superklassen). Arv henviser til virkningen af generalisering på underklasserne.
Når du ser et generalisering forhold mellem klasser, er dets betydning meget forskellig fra forholdet mellem en forening forholdet mellem klasser. En forening er i sidste ende et forhold mellem mange objekter - nogle tilfælde af en klasse har et forhold (link) med forekomster af den anden klasse. I et generaliseringsforhold blandt klasser handler forholdet virkelig om klasserne. Det bedste du kan sige er, at et objekt lavet af en underklasse indeholder alle funktionerne i underklassen og superklassen.
Du har kun ét objekt fra en klasse i et generaliseringsforhold. Selvom du viser to klasser, underklassen og superklassen, har du kun ét objekt, der bliver skabt. Du kan tænke på en genstand for videobåndklassen også at være en genstand for RecordedMedia-klassen på grund af arv. Figur 2 viser et objekt, der er oprettet fra Videobånd-klassen med alle dets attributter.(Eksemplet på en klasse er repræsenteret som et objektsymbol.) Du har ikke to forskellige objekter (en til RecordedMedia og en til Videobånd), kun en genstand. Når objektet vtu83-1023 blev oprettet, blev alle dets attributters værdier sat. Optagelsen på båndet er 57 minutter. Den totale længde af det fysiske bånd er 60 minutter. Båndet er en umatisk videokassette med en højde på 10 inches, en bredde på 7 inches og en dybde på 1, 5 inches. Optagelsen er analog, og en logbog af tapeindhold er fastgjort til båndet for arkivisten til reference.
Figur 2: En instans, der viser alle arvede attributter.
Du har kun en instans defineret af en underklasse og dens superklasse. Underklassen og superklassen kan have en konstruktøroperation (for at oprette forekomsten) og en destructoroperation (for at ødelægge forekomsten). Når din software kører, og du opretter en forekomst af en underklasse, udføres superklassens konstruktør først efterfulgt af konstruktøren af underklassen. Når det kommer tid til at eliminere forekomsten, du har oprettet, kaldes destruktoren af underklassen først, efterfulgt af superklassens destructor. Hvis tingene er mere komplekse, fordi du har underklasser af underklasser, skal du bare huske: Konstruktører påberåbes fra toppen af arvshierarkiet til bunden; Destruktorer kaldes i rækkefølge fra den laveste underklasse til den højeste superklasse.