3. sınıf 1. Dönem

CS 319 - Object Oriented Software Engineering

Birinci yazıda classlardan nesnelerden falan bahsetmiş. GidenAraba classı vardı mesela. İstersek GelenAraba classı da açabiliriz, BeşDakkayaKalkacak classı da, ArkalaraDoğruİlerleyelim classı da.

İstersek Sayı classı açıp içine sayı tek bir integer koyup classı da bundan ibaret yapabiliriz, böyle int sayı = 5; yerine Sayı sayı = 5; yazabiliriz. Bir sınırı yok. Fakat sınırı yok diye kafamıza göre takılırsak ortaya program yerine lahana turşusu çıkabilir.

Bu ders nesne yönelimli programlama yaparken kodun organizasyonunu nasıl yapacağımızı anlatmaya çalışır.

Tabii bu organizasyon daha fazla kod yazılarak yapılmaz. O yüzden bol bol word belgesi açıp rapor yazmanız gerek.

Raporda çizeceğiniz grafiklerin üstünden Bomberman oyununu kullanarak kısaca geçeyim:

Senaryolar: Oyuncu sağa sola bomba koyabilir, koyarsa şu olur (etrafta kırılacak duvar varsa onlar kırılır, canavar varsa canavar ölür, oyuncu varsa oyuncu ölür), oyuncu sağa sola koşturabilir.

Use Case Diagram: Oyuncunun yapabileceklerinin genel görüntüsü. Şöyle bir şey:

Sequence Diagram: 

Herhangi bir senaryodaki nesne ve fonksiyonlar dizisini gösterir. Örneğin oyuncu bomba atacak, oyuncu tuşa basar, bombaAt(); fonksiyonu çalışır falan.




State Diagram:

Üçüncü yazıda sonlu durum makinelerini anlatmıştım, ha işte bu grafikte de oyunun durumları gösterilir. Karakter yürüyor, karakter duruyor, canavar yürüyor vs.



Bunun gibi bir sürü ıvır zıvırı çizmekle geçiyor ders ama bu derste öğreneceğimiz burada da bahsedeceğim çok önemli bir şey var: Dizayn Kalıpları.

Günümüzde koridorsuz odaların birbirine yapışık olduğu, evin ortasına inşa edilip pencere konulmamış odalı yampirik yumpirik evler yok, bütün evler standart ve bir kalıba oturulmuş, 2+1, 3+1 diyince tüm dünya anlıyor. Tabii bu evleri yapanlar ev teorisini çocukluğundan beri çalışıp özümseyerek yapmıyorlar, bir kalıp var hepsi oradan kopya çekiyor.

Aynı şey (hayatının bütün alanlarında olduğu gibi) kodlamada da geçerli. Otuz hatta kırk yıl önce geliştiren tasarım kalıpları halen öğretilmekte ve kullanılmakta. Bunun en ünlülerinden birinden bahsedeyim biraz: Model - View - Controller.



Bu kalıbın mantığı şu: Model diyeceğimiz somut şeyleri ayrı tut, örneğin bomberman'de bomberman karakterini ayrı tut, bunun haritadaki yerini, hızını, cebinde kalan bomba sayısı vs. çeşitli verisini ayrı tut. Bunun için bir BombermanModel classı aç.

Viewda Bu bomberman yürürken ayrı gözüküyor, bomba atarken ayrı gözüküyor, ölürken ayrı. Bu tip kullanıcının ekranda göreceği kısmı ayrı tut, bunun için bir BombermanView classı açıyoruz. Birden fazla View classımız olabilir, örneğin Bomberman oyununda ekrana bir mini harita yapıştırmak isteyebiliriz. Bomberman'in yeri değişince hem haritadaki Bomberman (BombermanView ile gösterilen) hem de mini haritadaki Bomberman (BombermanMiniView diyelim buna hadi) yer değiştirir. Fakat bombermanin haritadaki yeri BombermanModel'de kayıtlı. O yüzden bütün Viewları BombermanModel'e abone yapıyoruz.

Bir de oyuncu tuşlara basınca oluşacak olaylar için bir class açıyoruz, ismi BombermanController olacak. Bu class'ta fonksiyonlar olacak ve oyuncu bir tuşa basınca bu fonksiyonlar çağrılıp BombermanModel değişecek, örneğin BombermanController "yürü();" fonksiyonunu kullanacak, BombermanModel'in içindeki koordinatlar değişecek.

BombermanModel değişince kendisine abone olan Viewlara "Ben değiştim arkadaşlar, yeni sayımı bayiilerden isteyin." diye e-mail gönderir. Viewlar Bomberman'den yeni veriyi alır, örneğin haritada değiştiyse tüm Viewlar içindeki Bomberman'in yerini değiştirip ekrana basar.

Mantık özetle bu. Üniversitede yazdığım tüm yazılımları (gerçi fazla bir şey yazmadım) bu kalıpla yazdım ve bir çok kişi böyle yazdı. Öyle ki derste anlatılan diğer kalıplar pek umrumuzda olmadı. Fakat tabii iş hayatına gelince işler değişecek. Küçük şirketlerde ne olur bilemem de büyük şirketlerin büyük projelerinde muhtemelen başta bir Baş Mühendis olacak ve bu kişinin bir çok danışmanı olacak, nasıl bir dizayn yapılacağına beraber karar verip yazılımcılara uygulatacaklar.

Biz de okulu o karar veren Baş Mühendis olup paraları cukkalamak için okuyoruz :)

Genel ve önemli bilgileri yeterince verdiğim için yazıyı burada noktalıyorum. Anlaşılmayan bir şey varsa mutlaka sorun.