2 Ekim 2010 Cumartesi

Head First Object Oriented Analysis and Design Kitabı

Stajda nesne yönelimli programlama tekniğini daha iyi anlamam için head first yayınlarının object oriented analysis and design kitabını okumam istendi. Kitap daha önce karşılaşmadığım bir anlatım tekniğiyle yazılmıştı. Kitapta bolca görsel öğeler kullanılarak anlatılacak konular okuyucuyu sıkmayacak bir şekilde aktarılmaya çalışılmıştır. Kitapta nesne yönelimli programlamanın önemini vurgulamak amacıyla çeşitli problemler tanımlanıyor. Problemler ilk başta nesne yönelimli programlama teknikleri kullanmadan da çözülebiliyor olmasına rağmen daha sonradan programa yeni bir şeyler eklenmek istendiğinde nesne yönelimli programlamanın önemi, yenilenebilirlilik kavramı açısından önemi daha iyi anlaşılıyordu.Bundan ilave kitap boyunca sürekli kullanıcıya sorular sorularak hem kullanıcılarla etkili iletişim kurulmuş hem de okuyucunun dikkati canlı tutulmaya çalışılmıştır.Kitap boyunca sürekli iyi bir yazılımın nasıl olması gerektiği hakkında çeşitli bilgiler verilimiştir. İyi bir yazılımın iyi tasarlanmış,iyi kodlanmış kolayca değiştirilebilir, kolayca yeniden kullanılabilir ve kolayca yenilikler eklenebilir olması gerektiği kitap boyunca üstüne basıla basıla çeşitli örnek problemler de ortaya atılarak vurgulanmıştır. Kitapta vurgulanan bir diğer önemli nokta iyi yazılımın müşterinin isteğine uygun yapılmış olması gerektiğidir. Yazılım tasarlarken nesne yönelimli programlama tekniğini düzgün kullanmamızın yazılımı sonradan müşterinin yeni isteklerine göre değiştirmemiz istendiğinde kolayca değiştirebileceğimizi göstermek amacıyla örnek bir problem tanımlanmıştır. Bu problemde ailenin şöyle bir sorunu vardır; köpekleri her gece havlayarak dışarı çıkmak istemektedir ve aile üyeleri gece yataktan kalkarak kapıyı açmaktan bıkmıştır.Köpek havladığı zaman dışarı çıkmasına izin veren bir kapı sisteminin tasarlanması istenmiştir. Bunun için yazılımcılar aile üyelerinin gece yataktan kalkarak köpeğe kapıyı açmalarının karşısını almak amacıyla uzaktan kumanda sistemi kullanılarak havlama sesi duyulduğunda kapıyı uzaktan kumandayla açabilmeleri sağlanmış ve müşteriler gece yataktan kalkmak zorunda kalmadıkları için programdan memnun kalmışlardır. Belli bir süre programı kullandıktan sonra aile üyeleri yeni isteklerini yazılımcılarına bildirmişlerdir. Bu sefer müşteriler sürekli gece uyanarak uzaktan kumandaya basmaktan bıktıklarını belirtmiş ve havlama sesine duyarlı otomatik kapı tasarlanmasını istemişlerdir. Yazılıma köpek sesi tanıyıcı eklendikten sonra müşterilerin istediği yazılım onlara sunulmuştur. Müşteriler mutlu bir şekilde yazılımın yeni versiyonunu kullandıktan sonra yeni bir istekle tekrar yazılımcılara müracaat etmişlerdir. Bu sefer müşteriler köpek sesi tanıyıcının tüm köpeklerin sesine tepki vererek açıldığından yakınmış ve köpek sesi tanıyıcısının sadece onların köpeğinin sesine duyarlı olmasını istemişlerdir. Yazılımcılar bu sorunu da çözerek köpek sesi tanıyıcısının sadece kendi köpeklerinin sesine duyarlı olmasını sağlamışlardır. Kitapta tüm bu değişikliklerin nesne yönelimli programlama tekniği kullanılarak ne kadar rahat yapılabildiği vurgulanmış ve kod üzerinde gösterilmiştir.

1 Ekim 2010 Cuma

Futbol Menajerlik Sümulasyonu Projesi

C# la ilgili uygulama tecrübemi arttırmak için Futbol menajerlik simülasyonu yapmaya karar vermişdim. Bu projeyi yaparken iyi bir yazılım ortaya çıkarmak için izlenmesi gereken aşamaları izlemeye çalıştım. Tasarım ve analiz aşamasında programımda kullanacağım sınıflara ve metotlara, programın kullanıcı arayüzünün nasıl olması gerektiğine karar verdim. Oyuncu ve takım sınıflarını kullanmam gerektiğine karar verdim. Kullanıcı arayüzünde ise kullanıcıya 4 seçenek sunuluyordu, bunlar yeni oyun, oyuna devam et, oyun kuralları ve hakkımızda seçenekleriydi. Bunlardan sadece ilkini aktif etmişdim diğerleri sonradan eklenebilir. Kullanıcı yeni oyun seçeneğini seçtiğinde karşısına bir forum çıkıyor ve kullanıcının bu forumdaki tüm bilgileri eksiksiz doldurması bekleniyor. İstenen bilgiler ad, soyad, yaş, milliyet ve seçmek istediği takım bilgileriydi. Bu arayüzü tasarlarken textbox ve combobox gibi kontrollerden faydalanmayı öğrendim. Ayrıca kullanıcının kendi esmini de programa yüklemesi mümkün. Kullanıcı bilgileri doldurup kaydet tuşuna bastığında ise karşısına programın ana sayfası çıkıyor. Ana sayfada olaylara göre sürekli değişen haberler kısmı yer alıyor richtextbox kullanılarak tasarlanmıştır. Richtextbox’ın yanında ise picturebox kontrolü kullanılarak gazete resmi koyularak bu kısımda haberlerin yer aldığı mesajı kullanıcıya iletilmeye çalışılmıştır. Ana sayfada yer alan bir diğer öğe devam düğmesidir. Bu düğme kullanıcının her basışında bir sonraki maçın oynanmasını sağlıyor. Ana Sayfanın üst kısmında tabbed panel kontrolü kullanılarak diğer sayfalara geçişler yapma fırsatı sağlanmıştır. Toplam on iki sayfa bulunmaktadır. Bunlar ana sayfa,taktik, antrenman, maç, takvim, lig bilgisi, transfer, bütçe, stadyum, kupa bilgisi, haberler ve hakkımızda sayfalarıdır. Tüm sayfaların sağladığı özelliklerden kısaca bahsetmek istiyorum.
Taktik Sayfası: Bu sayfada kullanıcının takımının taktiğini ayarlayabiliyor. Taktiği ayarlamadan maç yapılamıyor bu nedenle maç yapabilmek için taktik ayarlanması zorunludur. Ayarlamak istemeyen kullanıcılar yardımcıya sor seçeneğini tıklayarak taktiğin otomatik olarak ayarlanmasını sağlayabilirler. Taktiği otomatik seç seçeneği dizilişi değiştirmez sadece esas ve yedek kadro için oyuncu seçimi yapar. Kullanıcı sürükle-bırak yöntemiyle takımın dizilişini istediği şekilde ayarlayabilir. Kullanıcı taktiği ayarladıktan sonra kaydet butonuna basarak taktiğin kaydedilmesini sağlar.
Antrenman Sayfası: Bu sayfada kullanıcıdan takımının antrenman ayarlarını yapması istenir. Kullanıcı takımının antrenman ağırlıklarını yatay scroll-bar yardımıyla ayarlar.Antrenman ağırlığı olarak 3 aşama bulunmaktadır hafif, orta ve ağır.
Maç Sayfası: Bu sayfa menajerin dostluk maçı ayarlaması içindir. Kullanıcıdan rakip takımı ve maçın oynanacağı stadı seçmesi istenir. Kullanıcı bu seçenekleri seçtikten sonra maç düğmesine tıklayarak maçın oynanmasını sağlar. Bu aşamada ilerde bahsedeceğim maç oynatma algoritması devreye girerek takımların güçlerine göre bir maç skoru ve gol atılmışsa, gol atan oyuncuların isimleri kullanıcıya gösterilir.
Takvim Sayfası: Kullanıcı bu sayfada takımının sezon boyunca yapacağı resmi maçların takvim bilgilerine ulaşabilir. Ayrıca daha önce yapılmış maçların da skorlarını görebilir.
Lig Bilgisi: Kullanıcı bu sayfada lig tablosunu görebilir. Lig tablosunda takımların yaptığı maç sayısı ‘O’, galibiyet sayısı ‘G’, beraberlik sayısı ‘B’ , mağlubiyet sayısı ‘M’ ,attığı gol sayısı ‘AG’, yediği gol sayısı ‘YG’, averajı ‘AVG’ ve puanı ‘P’ görülmektedir. Kullanıcı bu sayfada ayrıca gol krallığı yarışına da göz atabilmektedir.
Transferler Sayfası: Bu sayfa programın bu versiyonunda bitirilememiştir. Bu sayfada kullanıcının oyuncu transferlerinin gerçekleştirmesi planlanmaktadır ilerki versiyonlar için.
Bütçe Sayfası:  Programın bu versiyonunda bu sayfada takımın bütçesi yer almaktadır sadece. Stadium sekmesinde anlatılacak olan yeni koltuk ekleme sırasında yapılan harcamalar bu ekranda görülebilmektedir.
Stadyum Sayfası:  Bu sayfada kullanıcı kendi takımının stadyum kapasitesini arttırabilmektedir.
Kupa Bilgisi Sayfası: Bu sayfa programın bu versiyonunda tasarlanmamıştır. İlerki versiyonlar için bu sayfada takımın avrupa kupası bilgi ve istatistiklerinin görüntülenmesi planlanmaktadır.
Haberler Sayfası: Bu sayfada kullanıcının internet bağlantısı mevcut olduğu taktirde http://www.pfl.az sitesinin ana sayfası görüntülenir ve kullanıcının azerbaycan ligiyle ilgili en güncel haberlere erişmesi sağlanır.

Hakkımızda Sayfası: Kullanıcı bu sayfada oyunun geliştiricisi hakkında bilgiye ulaşabilir. Geliştiriciyle iletişime geçerek yorumlarını iletebilir. Bu sayfada ayrıca programın ilerki versiyonlarında yapılması planlanan değişiklikler yer almaktadır.

Programın maç yaptırma algoritması şu şekilde çalışmaktadır: Tüm oyuncuların bir savunma ve hucum gücü değeri bulunmaktadır. Takımların sahaya sürülen ilk on bir oyuncusunun hucum ve defans değerlerinin aritmetik ortamaları takımın hücum ve defans değeri olmaktadır. Bir takımın hücum değeri diğer takımın defans gücü değerinden ne kadar yüksekse takımın gol atma olasılığı artmaktadır. Ayrıca kendi sahasında oynayan takımların rakip takıma göre biraz daha avantajlı olması sağlanmaktadır.  Rakibine göre göstericileri çok düşük olan takımların bile gerçek hayatta kazanma olasılığı bulunduğu göz önüne alınarak az olasılıkla da olsa bu takımlara bir veya iki gol atma şansı tanınmıştır.