inf-abi2027/03 Objektorientierung/02 Vererbung/04 Übung.ipynb

241 lines
5.2 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

{
"cells": [
{
"cell_type": "markdown",
"id": "62e51929",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"# Vererbung in TypeScript Geometrische Figuren\n",
"\n",
"In diesem Notebook modellierst du **geometrische Figuren** mithilfe von **objektorientierter Programmierung** und **Vererbung**."
]
},
{
"cell_type": "markdown",
"id": "528e0733",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 1: Basisklasse `Figur`\n",
"\n",
"Erstelle eine Klasse `Figur` mit folgender Eigenschaft:\n",
"\n",
"- `name: string`\n",
"\n",
"sowie folgenden Methoden:\n",
"\n",
"- `umfang(): number` → gibt standardmäßig `0` zurück\n",
"- `flaeche(): number` → gibt standardmäßig `0` zurück\n",
"- `getInfo(): string`\n",
" - gibt z. B. zurück:\n",
" `\"Figur: Rechteck, Umfang: 14, Fläche: 12\"`\n",
"\n",
"**Hinweis:** Die Methoden `umfang()` und `flaeche()` sollen in den Unterklassen überschrieben werden."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "85cf4730",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"// TODO: Klasse Figur hier implementieren\n"
]
},
{
"cell_type": "markdown",
"id": "dea8839f",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 2: Abgeleitete Klasse `Rechteck`\n",
"\n",
"Erstelle eine Klasse `Rechteck`, die **von `Figur` erbt**.\n",
"\n",
"Zusätzliche Eigenschaften:\n",
"\n",
"- `breite: number`\n",
"- `hoehe: number`\n",
"\n",
"Überschreibe die Methoden:\n",
"\n",
"- `umfang(): number` → `2 * (breite + hoehe)`\n",
"- `flaeche(): number` → `breite * hoehe`"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5e33fec4",
"metadata": {
"editable": true,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"outputs": [],
"source": [
"// TODO: Klasse Rechteck hier implementieren\n"
]
},
{
"cell_type": "markdown",
"id": "b7d388ad",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 3: Abgeleitete Klasse `Kreis`\n",
"\n",
"Erstelle eine Klasse `Kreis`, die **ebenfalls von `Figur` erbt**.\n",
"\n",
"Zusätzliche Eigenschaft:\n",
"\n",
"- `radius: number`\n",
"\n",
"Überschreibe die Methoden:\n",
"\n",
"- `umfang(): number` → `2 * Math.PI * radius`\n",
"- `flaeche(): number` → `Math.PI * radius * radius`"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "312b3f23",
"metadata": {},
"outputs": [],
"source": [
"// TODO: Klasse Kreis hier implementieren\n"
]
},
{
"cell_type": "markdown",
"id": "d757634c",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 4: Klasse `Quadrat`\n",
"\n",
"Ein Quadrat ist ein **spezielles Rechteck**, bei dem alle Seiten gleich lang sind.\n",
"\n",
"Erstelle eine Klasse `Quadrat`, die **von `Rechteck` erbt**.\n",
"\n",
"Zusätzliche Eigenschaft:\n",
"\n",
"- `seitenlaenge: number`\n",
"\n",
"**Hinweis:** Übergib die Seitenlänge sinnvoll an den Konstruktor der Oberklasse `Rechteck`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d38d2215",
"metadata": {},
"outputs": [],
"source": [
"// TODO: Klasse Quadrat hier implementieren\n"
]
},
{
"cell_type": "markdown",
"id": "72cfd572",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Aufgabe 5: Nutzung der Klassen\n",
"\n",
"1. Erzeuge:\n",
" - ein Rechteck,\n",
" - einen Kreis,\n",
" - ein Quadrat.\n",
"2. Gib für jede Figur die Methode `getInfo()` aus.\n",
"3. Überprüfe die Ergebnisse mit `console.log(...)`."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "cd294321",
"metadata": {},
"outputs": [],
"source": [
"// TODO: Objekte erzeugen und Methoden testen\n"
]
},
{
"cell_type": "markdown",
"id": "bc077348",
"metadata": {
"editable": false,
"slideshow": {
"slide_type": ""
},
"tags": []
},
"source": [
"## Denkfrage\n",
"\n",
"Warum ist es sinnvoll, die Methoden `umfang()` und `flaeche()` bereits in der Basisklasse `Figur` zu definieren, obwohl ihre konkrete Berechnung erst in den Unterklassen erfolgt?"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Deno",
"language": "typescript",
"name": "deno"
},
"language_info": {
"codemirror_mode": "typescript",
"file_extension": ".ts",
"mimetype": "text/x.typescript",
"name": "typescript",
"nbconvert_exporter": "script",
"pygments_lexer": "typescript",
"version": "5.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 5
}