Zusammenfassung – Mitarbeiter-Hierarchie
Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy — Lektion 40 von 107.
Aufgabe
EinfachLassen Sie uns ein Mitarbeiter-Hierarchiesystem für ein Unternehmen aufbauen, das zeigt, wie Komposition reale Organisationsstrukturen elegant modelliert. Sie erstellen einen Basis-Mitarbeitertyp, den spezialisierte Rollen mit ihren eigenen einzigartigen Verhaltensweisen erweitern können.
Sie organisieren Ihren Code in drei Dateien:
employee.go: Erstellen Sie die Grundlage mit einemEmployee-Struct, das die FelderID,NameundBaseSalary(float64) enthält. Geben Sie ihm zwei Methoden:Info() string, die[ID] [Name]zurückgibtCalculateBonus() float64, die 10% des Grundgehalts zurückgibt
roles.go: Erstellen Sie zwei spezialisierte Mitarbeitertypen, dieEmployeeeinbetten:Managermit einemTeamSize-Feld (int) — Manager erhalten einen höheren Bonus: 20% des Grundgehalts plus $100 pro Teammitglied. Überschreiben (Shadowing) Sie die MethodeCalculateBonus, um dies zu implementieren.Developermit einemLanguage-Feld (string) — Entwickler behalten den Standardbonus, überschreiben (Shadowing) jedoch die MethodeInfo, um ihre Programmiersprache anzuhängen:[ID] [Name] ([Language])
main.go: Lesen Sie die Mitarbeiterdetails aus der Eingabe ein, erstellen Sie einen Manager und einen Developer und zeigen Sie dann die Informationen und den berechneten Bonus jedes Mitarbeiters an.
Die folgenden Eingaben werden bereitgestellt:
- Zeile 1: Manager ID
- Zeile 2: Manager name
- Zeile 3: Manager base salary (float64)
- Zeile 4: Manager team size (integer)
- Zeile 5: Developer ID
- Zeile 6: Developer name
- Zeile 7: Developer base salary (float64)
- Zeile 8: Developer programming language
Geben Sie für jeden Mitarbeiter seine Informationen gefolgt von seinem Bonus in der nächsten Zeile aus. Formatieren Sie Boni mit zwei Dezimalstellen.
Zum Beispiel, gegeben M001, Sarah Chen, 80000, 5, D001, Alex Rivera, 65000 und Go, sollte Ihre Ausgabe wie folgt aussehen:
M001 Sarah Chen
16500.00
D001 Alex Rivera (Go)
6500.00Beachten Sie, wie sich die Bonusberechnung des Managers (20% von 80000 + 5×100 = 16500) vom Standardbonus von 10% des Entwicklers unterscheidet, während der Entwickler anpasst, wie seine Informationen angezeigt werden. Beide Typen haben weiterhin Zugriff auf die eingebetteten Employee-Felder und können bei Bedarf die ursprünglichen Methoden aufrufen.
Probier es selbst
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
reader := bufio.NewReader(os.Stdin)
// Manager-Details lesen
managerID, _ := reader.ReadString('\n')
managerID = strings.TrimSpace(managerID)
managerName, _ := reader.ReadString('\n')
managerName = strings.TrimSpace(managerName)
managerSalaryStr, _ := reader.ReadString('\n')
managerSalary, _ := strconv.ParseFloat(strings.TrimSpace(managerSalaryStr), 64)
teamSizeStr, _ := reader.ReadString('\n')
teamSize, _ := strconv.Atoi(strings.TrimSpace(teamSizeStr))
// Entwickler-Details lesen
devID, _ := reader.ReadString('\n')
devID = strings.TrimSpace(devID)
devName, _ := reader.ReadString('\n')
devName = strings.TrimSpace(devName)
devSalaryStr, _ := reader.ReadString('\n')
devSalary, _ := strconv.ParseFloat(strings.TrimSpace(devSalaryStr), 64)
devLanguage, _ := reader.ReadString('\n')
devLanguage = strings.TrimSpace(devLanguage)
// TODO: Erstellen Sie einen Manager mit den gelesenen Werten
// Hinweis: Verwenden Sie Komposition - Manager bettet Employee ein
// TODO: Erstellen Sie einen Entwickler mit den gelesenen Werten
// Hinweis: Verwenden Sie Komposition - Entwickler bettet Employee ein
// TODO: Manager-Informationen und Bonus ausgeben (Bonus auf 2 Dezimalstellen formatiert)
// Verwenden Sie fmt.Printf mit "%.2f" zur Formatierung
// TODO: Entwickler-Informationen und Bonus ausgeben (Bonus auf 2 Dezimalstellen formatiert)
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der Go OOP
Externe DateienGo Workspace & ModulePackages & ImportsExportierte vs. nicht-exportierte NamenEinführung in OOP in GoStructs als KlassenMethoden für Structs definierenPointer- vs. Value-ReceiverStruct-InitialisierungKonstruktor-FunktionenZusammenfassung – Einfacher Taschenrechner4Interfaces
Einführung in InterfacesImplizite ImplementierungInterface als VertragLeeres Interface (any)Type AssertionType SwitchInterface-KompositionStringer & Error InterfacesRückblick - Formen-Rechner7Kapselung
Exportierte vs. nicht exportierte FelderKapselung auf Paket-EbeneGetter- & Setter-MethodenInformation Hiding in GoZusammenfassung - Studierendendatensätze10Generics (Go 1.18+)
Einführung in GenericsTypparameterType ConstraintsGenerische StructsWorkaround für generische MethodenZusammenfassung – Generische Collection2Vertiefung: Typen & Structs
Basis- & zusammengesetzte TypenBenutzerdefinierte TypdefinitionenStruct TagsAnonyme StructsVerschachtelte StructsZero Values & StandardwerteZusammenfassung - Kontaktbuch5Komposition statt Vererbung
Warum Go keine Vererbung hatGrundlagen des Struct EmbeddingMethod PromotionEinbetten mehrerer StructsEmbedding vs. AggregationShadowing eingebetteter MethodenZusammenfassung – Mitarbeiter-Hierarchie8Fehlerbehandlung & OOP
Das error-InterfaceEigene FehlertypenError Wrapping (fmt.Errorf)Sentinel-Fehlererrors.Is() und errors.As()Panic, Defer und RecoverZusammenfassung – Datei-Parser3Zeiger & Speicher
Zeiger-Grundlagen in GoZeiger auf StructsWertübergabe vs. ReferenzübergabeDie new() FunktionGarbage Collection in GoWiederholung – Linked List Builder6Polymorphismus in Go
Polymorphismus über InterfacesDuck Typing in GoInterface-ErfüllungsregelnPolymorphe CollectionsDependency InjectionZusammenfassung – Payment Processor9Nebenläufigkeit & OOP
Goroutines GrundlagenChannels & KommunikationGepufferte vs. ungepufferte ChannelsSelect-Anweisungsync.Mutex & sync.RWMutexsync.WaitGroupThread-sicheres Struct-DesignZusammenfassung - Worker Pool