Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bisand/oop-polymorfisme
https://github.com/bisand/oop-polymorfisme
Last synced: 7 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/bisand/oop-polymorfisme
- Owner: bisand
- Created: 2024-05-29T04:47:31.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2024-05-29T17:52:58.000Z (7 months ago)
- Last Synced: 2024-12-31T20:52:53.909Z (8 days ago)
- Language: Python
- Size: 84 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Objektorientert Programmering
## Polymorfisme
Polymorfisme er et grunnleggende konsept i objektorientert programmering som refererer til evnen til en funksjon eller en metode til å behandle objekter av mange forskjellige klasser på en uniform måte. Ordet "polymorfisme" kommer fra gresk og betyr "mange former". Det finnes hovedsakelig to typer polymorfisme i programmering:
- ad hoc polymorfisme
- universell polymorfisme.### Praktisk eksempel på bruk av polymorfisme
___
La oss opprette en klasse som demonstrerer alle aspekter av universell polymorfisme: Parametrisk Polymorfisme og Inklusjonspolymorfisme (Subtyping). Vi kan opprette en klasse som representerer et bibliotekssystem, der vi kan legge til forskjellige typer medier (bøker, DVD-er, tidsskrifter) og utføre ulike operasjoner på dem.```python
class Media:
def __init__(self, title):
self.title = titledef display_info(self):
return f"Title: {self.title}"class Book(Media):
def __init__(self, title, author):
super().__init__(title)
self.author = authordef display_info(self):
return f"Title: {self.title}, Author: {self.author}"class DVD(Media):
def __init__(self, title, director):
super().__init__(title)
self.director = directordef display_info(self):
return f"Title: {self.title}, Director: {self.director}"class Magazine(Media):
def __init__(self, title, issue_number):
super().__init__(title)
self.issue_number = issue_numberdef display_info(self):
return f"Title: {self.title}, Issue Number: {self.issue_number}"# Generisk funksjon for å vise informasjon om et media
def display_media_info(media):
print(media.display_info())# Oppretter instanser av forskjellige medier
book = Book("The Great Gatsby", "F. Scott Fitzgerald")
dvd = DVD("Inception", "Christopher Nolan")
magazine = Magazine("National Geographic", "January 2024")# Viser informasjon om hvert medium
display_media_info(book) # Output: Title: The Great Gatsby, Author: F. Scott Fitzgerald
display_media_info(dvd) # Output: Title: Inception, Director: Christopher Nolan
display_media_info(magazine) # Output: Title: National Geographic, Issue Number: January 2024
```### Forklaring
1. **`Media`-klassen**: Dette er en grunnleggende klasse som representerer et medium med et tittelattributt.
2. **Underklassene (`Book`, `DVD`, `Magazine`)**: Disse klassene arver fra `Media` og legger til ytterligere attributter (f.eks. forfatter, regissør, utgivelsesnummer) og implementerer `display_info`-metoden for å vise informasjon om det spesifikke medietypen.
3. **Generisk funksjon `display_media_info`**: Dette er en generisk funksjon som kan vise informasjon om ethvert medium, uavhengig av dets spesifikke type. Den kaller `display_info`-metoden på det gitte mediaobjektet.
4. **Instanser av `Book`, `DVD`, `Magazine`**: Vi oppretter instanser av hver mediatype og viser informasjonen ved hjelp av den generiske funksjonen `display_media_info`.
Dette eksempelet demonstrerer parametrisk polymorfisme gjennom generisk funksjon og inklusjonspolymorfisme gjennom arv og metodetilpasning (overriding) i underklassene. Klassen `Media` fungerer som en felles grensesnitt for alle mediatypene, og underklassene bruker denne felles grensesnittet mens de legger til sine egne unike egenskaper og metoder.
### Oppgaver
Oppgaver nedenfor er ment for å gi deg en forståelse av hvordan klasser og objekter fungerer. Disse skal leveres innen neste forelesning. Arbeidskravet vil bestå av å få godkjent minst 2 av oppgavene. Det er ønskelig at dere leverer så mange som mulig, men det er ikke et krav.
Klikk [her](oppgaver/oppgaver.md) for å se oppgaver ([PDF](oppgaver/oppgaver.pdf)).