E-Öğrenme Platformu
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 107 / 110.
Görev
KolayBu kurs boyunca ustalaştığınız tüm OOP kavramlarını bir araya getiren bir E-Öğrenme Platformu inşa edelim. Soyut sınıflar, kalıtım, mixin'ler ve kapsülleme (encapsulation) kullanarak kullanıcıları, kursları ve kayıtları yöneten bir sistem oluşturacaksınız.
Platformunuz beş dosya halinde organize edilecektir:
user.dart:_id(String) ve_name(String) için özel alanlara (private fields) ve genel alıcılara (public getters) sahip soyut birUsersınıfı oluşturun. Alt sınıfların uygulaması gereken soyut birString getRole()metodu ekleyin.toString()metodunu, rolüngetRole()metodundan geldiği[role] name (id)formatını döndürecek şekilde geçersiz kılın (override).student.dart:Usersınıfını genişleten birStudentsınıfı oluşturun. Öğrenciler, bu dosyada tanımlanan ve 0'dan başlayan özel bir_completedLessonstam sayısına (getter ile birlikte), bunu artırancompleteLesson()metoduna veCompleted X lessonsdöndürengetProgressReport()metoduna sahip birProgressTrackingmixin'ini kullanmalıdır.Studentsınıfı,Studentdöndürecek şekildegetRole()metodunu uygulamalıdır.instructor.dart:Usersınıfını genişleten birInstructorsınıfı oluşturun. Eğitmenlerin özel bir_coursesCreatedlistesi (kurs başlıklarını temsil eden String listesi) olmalıdır. Listeye başlığı ekleyen ve başlığı döndüren bircreateCourse(String title)metodu ekleyin.Instructordöndürecek şekildegetRole()metodunu uygulayın. Oluşturulan kurs sayısını döndüren bircourseCountalıcısı (getter) ekleyin.enrollment.dart: Bir öğrencinin bir kursa kaydını takip eden birEnrollmentsınıfı oluşturun. BirstudentId(String),courseName(String) ve bir alıcıya (getter) sahip, varsayılanı false olan özel bir_isCompletedboolean değerine sahip olmalıdır. Tamamlanma durumunu true yapan birmarkComplete()metodu ekleyin.toString()metodunu, tamamlanma durumuna görestudentId enrolled in "courseName" - Status: CompletedveyaStatus: In Progressdöndürecek şekilde geçersiz kılın (override).main.dart: Her şeyi bir araya getirin. Bir eğitmen (I001,Dr. Smith) oluşturun ve iki kurs oluşturmasını sağlayın:Dart FundamentalsveAdvanced OOP. Eğitmeni ve kurs sayısınıCourses created: Xşeklinde yazdırın. Bir öğrenci (S001,Alice) oluşturun, onu yazdırın, ardından 3 dersi tamamlamasını sağlayın ve ilerleme raporunu yazdırın. Alice içinDart Fundamentalskursuna bir kayıt oluşturun, bunu yazdırın, tamamlandı olarak işaretleyin ve tekrar yazdırın.
Beklenen çıktı:
[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: CompletedKendin dene
import 'user.dart';
import 'student.dart';
import 'instructor.dart';
import 'enrollment.dart';
void main() {
// TODO: "I001" id'li ve "Dr. Smith" isimli bir eğitmen oluşturun
// TODO: Eğitmenin iki kurs oluşturmasını sağlayın: "Dart Fundamentals" ve "Advanced OOP"
// TODO: Eğitmeni yazdırın (toString() kullanır)
// TODO: "Courses created: X" yazdırın, burada X courseCount değeridir
// TODO: "S001" id'li ve "Alice" isimli bir öğrenci oluşturun
// TODO: Öğrenciyi yazdırın
// TODO: Öğrencinin 3 dersi tamamlamasını sağlayın (completeLesson() metodunu 3 kez çağırın)
// TODO: Öğrencinin ilerleme raporunu yazdırın
// TODO: Alice (S001) için "Dart Fundamentals" kursuna bir kayıt (enrollment) oluşturun
// TODO: Kaydı yazdırın
// TODO: Kaydı tamamlandı olarak işaretleyin
// TODO: Kaydı tekrar yazdırın
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı