{"id":18981759,"url":"https://github.com/bisand/oop-polymorfisme","last_synced_at":"2026-06-23T13:31:02.411Z","repository":{"id":241718414,"uuid":"807425089","full_name":"bisand/oop-polymorfisme","owner":"bisand","description":null,"archived":false,"fork":false,"pushed_at":"2024-05-29T17:52:58.000Z","size":86,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-18T14:38:11.632Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bisand.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-29T04:47:31.000Z","updated_at":"2024-05-29T17:53:02.000Z","dependencies_parsed_at":null,"dependency_job_id":"0bc03f4f-e421-4071-b885-3de7f8a9aab3","html_url":"https://github.com/bisand/oop-polymorfisme","commit_stats":null,"previous_names":["bisand/oop-polymorfisme"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bisand/oop-polymorfisme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisand%2Foop-polymorfisme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisand%2Foop-polymorfisme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisand%2Foop-polymorfisme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisand%2Foop-polymorfisme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bisand","download_url":"https://codeload.github.com/bisand/oop-polymorfisme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bisand%2Foop-polymorfisme/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34691638,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-08T16:11:13.310Z","updated_at":"2026-06-23T13:31:02.392Z","avatar_url":"https://github.com/bisand.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Objektorientert Programmering\n\n## Polymorfisme\n\nPolymorfisme 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:\n\n- ad hoc polymorfisme\n- universell polymorfisme.\n\n### Praktisk eksempel på bruk av polymorfisme\n\n___\nLa 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.\n\n```python\nclass Media:\n    def __init__(self, title):\n        self.title = title\n\n    def display_info(self):\n        return f\"Title: {self.title}\"\n\nclass Book(Media):\n    def __init__(self, title, author):\n        super().__init__(title)\n        self.author = author\n\n    def display_info(self):\n        return f\"Title: {self.title}, Author: {self.author}\"\n\nclass DVD(Media):\n    def __init__(self, title, director):\n        super().__init__(title)\n        self.director = director\n\n    def display_info(self):\n        return f\"Title: {self.title}, Director: {self.director}\"\n\nclass Magazine(Media):\n    def __init__(self, title, issue_number):\n        super().__init__(title)\n        self.issue_number = issue_number\n\n    def display_info(self):\n        return f\"Title: {self.title}, Issue Number: {self.issue_number}\"\n\n# Generisk funksjon for å vise informasjon om et media\ndef display_media_info(media):\n    print(media.display_info())\n\n# Oppretter instanser av forskjellige medier\nbook = Book(\"The Great Gatsby\", \"F. Scott Fitzgerald\")\ndvd = DVD(\"Inception\", \"Christopher Nolan\")\nmagazine = Magazine(\"National Geographic\", \"January 2024\")\n\n# Viser informasjon om hvert medium\ndisplay_media_info(book)      # Output: Title: The Great Gatsby, Author: F. Scott Fitzgerald\ndisplay_media_info(dvd)       # Output: Title: Inception, Director: Christopher Nolan\ndisplay_media_info(magazine)  # Output: Title: National Geographic, Issue Number: January 2024\n```\n\n### Forklaring\n\n1. **`Media`-klassen**: Dette er en grunnleggende klasse som representerer et medium med et tittelattributt.\n\n2. **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.\n\n3. **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.\n\n4. **Instanser av `Book`, `DVD`, `Magazine`**: Vi oppretter instanser av hver mediatype og viser informasjonen ved hjelp av den generiske funksjonen `display_media_info`.\n\nDette 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.\n\n### Oppgaver\n\nOppgaver 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.\n\nKlikk [her](oppgaver/oppgaver.md) for å se oppgaver ([PDF](oppgaver/oppgaver.pdf)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbisand%2Foop-polymorfisme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbisand%2Foop-polymorfisme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbisand%2Foop-polymorfisme/lists"}