{ "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 }