Zusammenfassung – Shape-Rechner
Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 36 von 57.
Aufgabe
SchwerErstelle einen Formrechner, der Polymorphismus und Generika kombiniert. Das Protokoll Shape erfordert name, area() und perimeter() (beide Double). Implementiere Rect, Circle (π als 3.14) und Triangle (drei Seiten, die Fläche nach Herons Formel mit sqrt aus Foundation). Schreibe eine generische Funktion largest<T>(_ items: [T], by key: (T) -> Double) -> T?. Vervollständige report(_:), die für jede Form eine Zeile mit zwei Dezimalstellen zurückgibt (rect: area 12.00, perimeter 14.00), gefolgt von largest area: circle und largest perimeter: rect, die beide mit largest ermittelt werden.
Der bereitgestellte Code liest Zeilen rect,3,4, circle,2 oder tri,3,4,5, erstellt [any Shape] und gibt jede zurückgegebene Zeile aus.
Dein Code gehört in Shape.swift, Rect.swift, Circle.swift, Triangle.swift und Functions.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
import Foundation
// Bereitgestellter Ein-/Ausgabe-Code: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
var shapes: [any Shape] = []
for line in input {
let p = line.split(separator: ",").map(String.init)
let v = p.dropFirst().map { Double($0)! }
switch p[0] {
case "rect": shapes.append(Rect(w: v[0], h: v[1]))
case "circle": shapes.append(Circle(r: v[0]))
default: shapes.append(Triangle(a: v[0], b: v[1], c: v[2]))
}
}
for line in report(shapes) { print(line) }
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenMethoden und selfInitialisiererKlassen sind ReferenzenRückblick – Bibliotheksausweis4Kapselung
ZugriffskontrolleVon außen schreibgeschütztZustand schützenFehlschlagende InitialisiererRückblick – Bankkonto7Polymorphismus und Generika
PolymorphismusTypumwandlungGenerische FunktionenGenerische TypenZusammenfassung – Shape-Rechner2Strukturen und Werttypen
StrukturenWertsemantikVerändernde MethodenStruktur oder KlasseZusammenfassung – Inventarelement5Vererbung
UnterklassenMethoden überschreibenInitialisierer und superfinal und HierarchienRückblick – Mitarbeiterhierarchie8Standardprotokolle
CustomStringConvertibleEquatableComparableHashableRückblick – Benutzerdefiniertes Sortieren11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Swift-Playground