Video: Tydlig kommunikation med NLP 2024
Det är naturligt att klassificera objekt i kategorier och att organisera kategorier i underkategorier. Om du letar efter ett ställe att bo, befinner du dig själv att kategorisera en bostad som hus, lägenhet, radhus, villa, herrgård och så vidare. Hus kan i sin tur organiseras ytterligare av stilar som ranch, split-level, koloniala och saltbox. UML ger dig en notering för att fånga dessa typer av klassificeringar - även känd som generalisering och specialisering - och utnyttja dem som modellare och programmerare.
Vissa objektorienterade utvecklare kommer att gå till stora delar för att spara lite arbete. När de kan modellera något en gång och återanvända det, är de intresserade. Om de kan skriva en metod (programkoden för en operation) för en klass endast en gång och använda den många gånger, registrerar du dem för högre produktivitet. Om du vill spara dig tid genom att ange attribut och operationer en gång och sedan återanvända dem många gånger, läs vidare.
När du definierar klasser kanske du märker att vissa klasser har samma attribut eller samma verksamhet. När så är fallet placerar du dessa gemensamma funktioner (attribut, operationer osv.) I en mer generisk klass som heter superklassen. Klasserna som delar de gemensamma funktionerna kallas superklassen underklasser . Längden på inspelat material på ett videoband, ljudband, cd eller filmfil är till exempel en egenskap för alla fyra typer av inspelat medium. Dessa klasser kan också dela med andra attribut, till exempel deras fysiska dimensioner och datumet var och en användes för att göra en inspelning. I detta fall skulle superklassen vara Inspelad Media, underklasserna skulle vara Videoband, Audiotape, CompactDisc och MovieFilm, och vissa delade attribut kan innefatta inspeladLängd och TotalLängd.
Denna process för att hitta liknande attribut eller aktiviteter över klasser kallas generalisering. Till exempel generaliserar du attributet RecordLength till en mer generisk klass som heter RecordedMedia. Processen för att visa en generalisering i UML är enkel:
1. Identifiera underklassen.
Hitta klasser som har samma attribut och / eller operationer. Dessa klasser är dina underklasser.
2. Skapa en superklass.
Ge en superklass för att hålla de gemensamma attributen och / eller operationerna i underklassen. Ge superklassen ett namn som kategoriserar alla underklasser. Att placera superklassen ovanför underklassen i diagrammet gör det lättare att läsa men det är inte nödvändigt.)
3. Lägg till gemensamma funktioner i superklassen.
Ta bort de gemensamma attributen och operationerna från underklassen och placera dem (en gång) i superklassen.
4. Rita ett generaliseringsförhållande.
Du ritar en generaliseringsrad från varje underklass till superklassen. I UML representeras generaliseringslinjen som en solid linje med ett ihåligt pilhuvud vid superklassänden. I UML är en linje med det ihåliga pilhuvudet som ansluter en underklass till en superklass känd som ett generaliseringsförhållande.
När du har skapat en superklass med de gemensamma funktionerna som attribut och operationer, delkategorierna ärva dessa funktioner från superklassen. På så sätt behöver du bara skriva de gemensamma funktionerna en gång i superklassen istället för många gånger i varje underklass.
Du kan se om du har en generalisering genom att titta på det språk du (eller andra) använder för att beskriva förhållandet mellan klasser. Observera att när man beskriver inspelat media och dess olika typer, såsom videoband tidigare i det här avsnittet, uppträdde frasen "four kindsof recorded media". Om du hittar dig själv med hjälp av fraser som "typ av" eller "typ av", då är chansen att du har en generalisering på dina händer.
Säg att en av dina kunder är oroade över att hålla koll på material i ett arkiv. Den här klienten har ackumulerat olika typer av inspelade media, såsom videoband och ljudböcker. Som modellers måste du fånga skillnaderna mellan dessa medier och deras likheter. Diagrammet i Figur 1 visar början på flera generaliseringar, arrangerade i en arvshierarki.
Figur 1: Enkel arvshierarki.
Utvecklare använder begreppet generalisering eller arv för att referera till samma begrepp om att återanvända delade attribut och operationer som du visar i en superklass och återanvändning i underklasser. Generalisering hänvisar till begreppet generalisering från specifika (delklasserna) till generiken (superklassen). Erfarenhet avser effekten av generalisering på underklassen.
När du ser en generalisering -förhållande mellan klasser, är dess betydelse väldigt annorlunda än en förening relation mellan klasser. En förening är i slutändan ett förhållande bland många objekt - vissa fall av en klass har ett förhållande (länk) med andra klassers instanser. I ett generaliseringsförhållande bland klasser handlar förhållandet verkligen om klasserna. Det bästa du kan säga är att ett objekt skapat från en underklass innehåller alla funktioner i underklass och superklass.
Du har bara ett objekt från en klass i ett generaliseringsförhållande. Även om du visar två klasser, underklass och superklass, har du bara ett objekt som skapas. Du kan tänka på ett objekt av Videobandklassen som också är ett föremål för RecordedMedia-klassen på grund av arv. Figur 2 visar ett objekt skapat från Videotape-klassen med alla dess attribut.(Förekomsten av en klass representeras som en objektsymbol.) Du har inte två olika objekt (en för Inspelad Media och en för Videoband), bara ett objekt. När objektet vtu83-1023 skapades, sattes alla dess attributs värden. Inspelningen på bandet är 57 minuter. Den totala längden på det fysiska tejpen är 60 minuter. Tejpen är en umatisk videokassett med en höjd av 10 tum, en bredd på 7 tum och ett djup på 1, 5 tum. Inspelningen är analog, och en logg med tejpinnehåll är fäst på tejpen för arkivisten som referens.
Figur 2: En instans som visar alla ärftliga attribut.
Du har bara en instans definierad av en underklass och dess superklass. Underklass och superklass kan ha en konstruktörsoperation (för att skapa förekomsten) och en destructoroperation (för att förstöra förekomsten). När din programvara körs och du skapar en förekomst av en underklass, utförs superklassens konstruktör först, följt av konstruktören i underklassen. När det kommer dags att eliminera förekomsten du skapade, kallas förstörarens subklass först, följt av superklassens destructor. Om sakerna är mer komplexa eftersom du har underklasser av underklasser, kom bara ihåg: Konstruktörer åberopas från toppen av arvshierarkin till botten; Destructorer kallas i ordning från lägsta underklass upp till högsta superklassen.