Ödev 2 Bir öğrenci bilgi sistemi uygulamasını nesneye yönelik programlama teknikleri kullanarak geliştirmeniz beklenmektedir (C#, Java veya C++ dillerinden biriyle).
- Tasarımınızda Öğrenci soyut sınıfını genişleten Lisans, Yüksek Lisans ve Doktora öğrencilerini tanımlayacak sınıflarınız olmalıdır.
- Ayrıca Üniversite, Fakülte, Bölüm, Ders, Şube ve Öğretim Elemanı sınıfları da gerekmektedir. Derse/şubeye o dönem kayıtlı öğrencilerin ilgili jenerik veya uygun gördüğünüz koleksiyon yapılarında tutulması gerekmektedir.
- Gerektiğinde bölüme/fakülteye ait tüm dersler, tüm şubeler ve kayıtlı öğrencilere ulaşılabilecek bir yapı tasarlanmalıdır.
- İstendiği takdirde Üniversiteye yeni bir Fakülte veya varolan bir Fakülteye yeni bir Bölüm açılabilmelidir.
- Uygun sınıfların içerisinde bölümlere öğrenci kayıt etme ve silme, bölüme öğretim elemanı atama ve silme, ders açma ve kapama, derse öğretim elemanı atama ve değiştirme, derse öğrenci ekleme ve silme işlemlerinin olması gerekmektedir.
- Kullanıcının istenen bir dersi dosyaya kaydetme seçeneği olmalıdır. Yani uygulamada dersle ilgili tasarladığınız tüm verilerin (öğretim üyesi, asistan, dönemi, öğrenci listesi vs.) en azından bir düz metin veya xml, json dosyası olarak kaydedilebilmesi gerekmektedir. Bir dersi dosyadan uygulamaya geri yükleme seçeneği opsiyoneldir, ama bunun geliştirme ve test etme süreciniz açısından size zaman kazandırma açısından çok faydası olabilir.
- Ödevinizde en az bir tasarım deseni (örüntüsü) kullanılmalıdır. Örneğin memento tasarım deseni ile son yapılan işlemin geri alınması veya yapınız içindeki koleksiyonların iterator tasarım deseni ile gezilmesi gibi.
- Ödevinizi yaparken koleksiyonlar, kalıtım, sarmalama, çok biçimlilik başlıklarında nesneye yönelik tasarımının gerektirdiği ilgili tüm teknik ve yapıları kullanmanız beklenmektedir. Tasarım detayınızın ucu açıktır, fakat gerekli kısımlarda istisna yönetimi yapmanız zorunludur. Sistemin daha ne kadar detaylandırılacağı (derse ait öğrencinin ödev, sınav, vd. notları, dersin işleneceği sınıf, dersin asistanı vb.) tercihinize kalmış olmasına karşın minimum özellikler yukarıdaki maddelerde ifade edildiği gibidir.
- Kod dosyalarınızda (özellikle metotlarda) açıklama (commenting) yapmayı ve gerektiği kısımlarda faydalandığınız referansları belirtmeyi lütfen ihmal etmeyiniz.
- Yapacağınız detaylandırmanın seviyesi, kodunuzun nesne yönelimli programlama kavramlarına uygunluğu, yeterli açıklama yapmanız ve düzgün bir tasarım deseni kullanımına ek olarak programın yukarıda listelenen minimum özelliklere ne derece sahip olup olmadığı ödev değerlendirmenizi etkileyecektir.
İyi çalışmalar ve başarılar!