Vid systemanalys och design är generalisering en kraftfull modelleringsteknik som används i objektorienterade tillvägagångssätt, särskilt inom UML (Unified Modeling Language). Det representerar en relation mellan en mer allmän enhet (föräldern eller superklassen) och en mer specifik enhet (barnet eller underklassen). Barnet ärver attribut och beteenden (metoder) från föräldern och kan också lägga till sina egna unika attribut och beteenden.
Här är en uppdelning:
* Superclass/Parent Class: Detta representerar det allmänna konceptet. Den definierar vanliga attribut och beteenden som delas av dess underklasser.
* Underklass/barnklass: Detta representerar en mer specifik instans av superklassen. Det ärver alla attribut och beteenden hos superklassen och kan lägga till sina egna specifika egenskaper.
Fördelar med generalisering:
* Kodens återanvändbarhet: Undviker redundans genom att definiera vanliga attribut och beteenden en gång i superklassen. Underklasser ärver den här koden och minskar utvecklingstiden och ansträngningen.
* Underhållbarhet: Ändringar av superklassen sprids automatiskt till alla underklasser, vilket förenklar underhåll. Om ett vanligt attribut behöver uppdateras behöver du bara ändra det på ett ställe.
* Extensibility: Lägg enkelt till nya underklasser för att representera mer specifika typer utan att ändra befintlig kod.
* Förbättrad förståbarhet: Ger en tydlig hierarkisk struktur som representerar förhållandena mellan olika enheter, vilket gör systemet lättare att förstå och hantera.
Exempel:
Tänk på ett system för att hantera anställda. Du kan ha en "person" superklass med attribut som "namn", "adress" och "telefonnummer". Då kan du ha underklasser som "anställd", "chef" och "entreprenör", var och en ärvde attributen för "person" men lägga till sina egna specifika attribut (t.ex. "lön" för "anställd", "avdelning" för "chef" men "contract_rate" för "entreprenör").
Förhållandet "is-a" är nyckeln här:en "anställd" * är en * "person", en "manager" * är en * "person", och så vidare. Detta "IS-A" -förhållande indikerar tydligt en generalisering.
I UML -diagram representeras generalisering av en solid linje med en ihålig triangel som pekar mot superklassen.
I huvudsak främjar generalisering modularitet, återanvändbarhet och underhållbarhet i systemdesign genom att organisera enheter till en hierarkisk struktur baserat på deras gemensamma och skillnader.