Platforma e-learningowa
Część sekcji Programowanie obiektowe ścieżki Dart w Coddy. Lekcja 107 z 110.
Wyzwanie
ŁatwyZbudujmy platformę e-learningową, która łączy wszystkie koncepcje OOP opanowane przez Ciebie w trakcie tego kursu. Stworzysz system zarządzający użytkownikami, kursami i zapisami na kursy, wykorzystujący klasy abstrakcyjne, dziedziczenie, mixiny i enkapsulację.
Twoja platforma będzie składać się z pięciu plików:
user.dart: Utwórz abstrakcyjną klasęUserz prywatnymi polami_id(String) i_name(String) oraz publicznymi getterami. Dodaj metodę abstrakcyjnąString getRole(), którą muszą implementować podklasy. NadpisztoString(), aby zwracała[role] name (id), gdzie wartość role pochodzi zgetRole().student.dart: Utwórz klasęStudent, która rozszerza klasęUser. Studenci powinni używać mixinaProgressTracking(zdefiniowanego w tym pliku), który udostępnia prywatną liczbę całkowitą_completedLessons(początkowo równą 0) z getterem oraz metodycompleteLesson(), która ją zwiększa, igetProgressReport(), która zwracaCompleted X lessons. KlasaStudentpowinna implementowaćgetRole(), aby zwracałaStudent.instructor.dart: Utwórz klasęInstructor, która rozszerza klasęUser. Instruktorzy mają prywatną listę_coursesCreated(listę wartości String reprezentujących tytuły kursów). Dodaj metodęcreateCourse(String title), która dodaje tytuł do listy i go zwraca. ZaimplementujgetRole(), aby zwracałaInstructor. Dodaj gettercourseCount, który zwraca liczbę utworzonych kursów.enrollment.dart: Utwórz klasęEnrollment, która śledzi zapis studenta na kurs. Powinna mieć polastudentId(String),courseName(String) oraz prywatne pole logiczne_isCompleted(domyślnie ustawione na false) z getterem. Dodaj metodęmarkComplete(), która ustawia status ukończenia na true. NadpisztoString(), aby zwracałastudentId enrolled in "courseName" - Status: CompletedlubStatus: In Progress, w zależności od statusu ukończenia.main.dart: Połącz wszystkie elementy. Utwórz instruktora (I001,Dr. Smith) i spraw, aby utworzył dwa kursy:Dart FundamentalsiAdvanced OOP. Wypisz instruktora oraz liczbę jego kursów w formacieCourses created: X. Utwórz studentkę (S001,Alice) i ją wypisz, a następnie spraw, aby ukończyła 3 lekcje, po czym wypisz raport jej postępów. Utwórz zapis Alice na kursDart Fundamentals, wypisz go, oznacz jako ukończony i wypisz ponownie.
Oczekiwany wynik:
[Instructor] Dr. Smith (I001)
Courses created: 2
[Student] Alice (S001)
Completed 3 lessons
S001 enrolled in "Dart Fundamentals" - Status: In Progress
S001 enrolled in "Dart Fundamentals" - Status: CompletedSpróbuj swoich sił
import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';
void main() {
// TODO: Utwórz instruktora o id "I001" i imieniu "Dr. Smith"
// TODO: Niech instruktor utworzy dwa kursy: "Dart Fundamentals" i "Advanced OOP"
// TODO: Wyświetl instruktora (używa toString())
// TODO: Wyświetl "Courses created: X", gdzie X to courseCount
// TODO: Utwórz studenta o id "S001" i imieniu "Alice"
// TODO: Wyświetl studenta
// TODO: Niech student ukończy 3 lekcje (wywołaj completeLesson() 3 razy)
// TODO: Wyświetl raport postępów studenta
// TODO: Utwórz zapis na kurs dla Alice (S001) in "Dart Fundamentals"
// TODO: Wyświetl zapis na kurs
// TODO: Oznacz zapis na kurs jako ukończony
// TODO: Wyświetl zapis na kurs ponownie
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy OOP
Pliki zewnętrzneBiblioteki i importyWprowadzenie do OOPKlasy a obiektySłowo kluczowe thisMetodyZmienne instancjiPodstawy konstruktorówPowtórka – prosty kalkulator4Bezpieczeństwo wartości null
Wprowadzenie do bezpieczeństwa wartości nullTypy dopuszczające null i niedopuszczające nullOperatory ? i !Słowo kluczowe late a bezpieczeństwo wartości nullOperatory uwzględniające nullBezpieczeństwo wartości null w klasachPodsumowanie — system profili użytkowników7Klasy abstrakcyjne i interfejsy
Klasy abstrakcyjneMetody abstrakcyjneInterfejsy w DartInterfejsy niejawneImplementowanie a rozszerzanieWiele interfejsówPowtórka — kalkulator kształtów10Kolekcje i typy generyczne
Przegląd List, Set i MapKolekcje bezpieczne typowoKlasy generyczneMetody generyczneOgraniczenia typów generycznychIterable i IteratorPowtórka — generyczne przechowywanie danych13Zaawansowane koncepcje OOP
Kompozycja a dziedziczenieMetody rozszerzająceKlasy wywoływalneKlasy zapieczętowane (Dart 3)Rekordy (Dart 3)Wzorce i dopasowywanie (3.0)Typy wyliczeniowe z metodami16Projekt: Zarządzanie biblioteką
Omówienie projektuKlasy książek i użytkowników2Konstruktory w Dart
Konstruktor domyślnyKonstruktory nazwaneListy inicjalizująceKonstruktory stałeKonstruktory fabryczneKonstruktory przekierowującePodsumowanie — budowanie kształtów5Hermetyzacja
Elementy publiczne a prywatneKonwencja prefiksu _Prywatność na poziomie bibliotekiGettery i settery — szczegółowoUkrywanie informacjiPodsumowanie — dane uczniów8Domieszki
Wprowadzenie do domieszekTworzenie domieszekKorzystanie z wielu domieszekSłowo kluczowe on w domieszkachDomieszka a dziedziczenieDomieszka a interfejsPodsumowanie – system zwierząt11Metody specjalne
Nadpisanie toString()Nadpisanie hashCode i ==Interfejs ComparableMetoda call()Nadpisanie noSuchMethodPodsumowanie — własna kolekcja14Wzorce projektowe, część 1
Wprowadzenie do wzorców projektowychWzorzec SingletonWzorzec FactoryWzorzec ObserverWzorzec Strategy3Właściwości klas
Elementy instancji a elementy statycznePola final i constZmienne inicjalizowane z opóźnieniemMetody i pola statyczneGettery i setteryPowtórzenie – menedżer kont bankowych6Dziedziczenie
Podstawy dziedziczeniaSłowo kluczowe superPrzesłanianie metodAdnotacja @overrideSłowo kluczowe final dla klasKonstruktory i dziedziczeniePowtórzenie – hierarchia pracowników9Polimorfizm
Podstawy polimorfizmuPolimorfizm za pomocą interfejsówSprawdzanie typu w czasie działaniaOperatory is i asSłowo kluczowe covariantPodsumowanie — procesor płatnościPoćwicz samodzielnie: Kompilator Dart online