C++ Java ve C# ile UML ve Dizayn Paternleri | C ve Sistem Programcıları Derneği
21.10.2014 - 01:43 tarihinde aykut gönderdi
Nesne yönelimli programlama, günümüzde en sık kullanılan yazılım geliştirme tekniği ancak bu konu programlama dillerinin sözdizim özeliklerinden, sınıf, arayüz, türetme veya sanallık gibi temel altbaşlıklarından ibaretmiş gibi algılanmaktadır. Oysa nesne yönelimli programlama denilince bilinmesi gereken konular özetle; modelleme, dizayn paternleri, prensipleri ve UML notasyonudur. Bu kitap sayılan konuları üç dilde ve örneklerle ele almaktadır.
Kitaptaki tüm konular örneklerle anlatılmakta ayrıca kitabın bir bölümü yazar tarafından “proje örnekleri” diye nitelenen ve (Android, WPF, WebServis, ASP.NET, STL, CodeDom, Remoting) gibi çeşitli teknolojilere ilişkin daha kapsamlı örneklere ayrılmıştır. Bu bölümde ön plana çıkan olgu; katmanlı mimariye göre uygulama geliştirmedir.
Ayrıca kitapta ek bir bölüm olarak giriş seviyesinde ve okuyucuya bu konu hakkında genel kültür kazandırmak amacıyla proje yönetimi metodolojileri (XP, Scrum, MSF, RUP vb) ele alınmaktadır.
Kitapla ilgili merak edilen soruları yazar aşağıdaki kanalda yanıtlıyor :
Bu Kitabın Hedeflediği Okuyucu Kitlesi
Öncelikle bu kitabın hedef kitlesi C#, C++ ya da Java dillerini yeni öğrenmekte olan kişiler değildir. Kitap bu diller hakkında temel bilgilere (karar yapıları, diziler, döngüler, pointer’lar, sanallık, sınıflar, interface’ler vb) sahip olduğunuz varsayılarak yazılmıştır. Dolayısıyla elinizdeki kitap, söz konusu dillerin kendisini öğretme iddiasında olan, başlangıç düzeyindeki bir kitap değildir.
Özetle bu kitap kendisini aşağıdaki cümlelerle tanımlayan bir okuyucu için faydalı olabilir :
- Okulda veya kursta C++, Java veya C# dillerini temel düzeyde öğrendim hatta bazı uygulamalar da geliştirebiliyorum ama nesne yönelimli programlamaya tam olarak hakim değilim. Örneğin “polimorfizm nedir?” deseniz cevap verebilirim ama kodlama esnasında bunu gerçekleştiremem. Bu nedenle sektörde çalışmak için kendime tam olarak güvenemiyorum.
- Bir firmada yazılım geliştirici olarak çalışıyorum ve kariyerimde yazılım mimarı/proje yöneticisi olmayı hedefliyorum. Dolayısıyla ileri düzeyde nesne yönelimli programlama öğrenmek, dizayn paternleri ve yazılım mimarileri ile mimari paternlere hakim olmak istiyorum. Öte yandan Türkiye’de bir yazılım mimarının aynı zamanda proje yöneticisi de olması beklendiği için bu konuyla da ilgili temel bilgilere ihtiyaç duyuyorum.
- Bir firmada analist olarak çalışıyorum. Analizi bilimsel ve dünyaca kabul görmüş standart yöntemlerle yapamıyor ve dokümante edemiyorum. Ayrıca yazılım geliştiricilerin dilinden tam olarak anlayamıyorum.
- Bir firmada yazılım geliştiriciyim ama analiz ve modelleme konularında bilgi sahibi olmak istiyorum.
- Hali hazırda kullandığım teknoloji veya frameworklerde (WPF, Android, STL, ASP.NET) bazı özellikleri kullanıyorum ancak onun neden öyle olduğunu bilemiyorum. Bilinç düzeyimi nasıl daha iyi hale getirip, bu teknolojileri nasıl daha verimli kullanabilirim ?
C++ veya C# biliyorum ama Android geliştiricisi olabilmek için Java öğrenmem gerekiyor. Ya da Java programcısıyım ama bir projede WCF ve C# kullanmam gerekli. Öte yandan temel düzeyde bir kitap alarak bildiğim konuları (döngü, karar yapıları, değişkenler vs) baştan öğrenmeye çalışarak zaman kaybetmeksizin ileri düzey örneklerle bu üç dili karşılaştırmalı nasıl öğrenebilirim ?
Bunlar ve daha pek çoğu yıllardır verdiğim ders ve eğitimlerde ya da mail yoluyla bana sorulan sorulardan yaptığım bir derleme. Siz de kendinizi buna benzer kelimelerle tanımlıyorsanız ya da zihninizde benzer sorular varsa bu kitap sizin için faydalı olacaktır.
Kitaptaki Bölümlerin Özeti
2. Tasarım ve Paketleme Prensipleri : Bölüm nesne yönelimli programlama prensiplerine ayrılmıştır. Prensiplerin paternlerden önce ele alınmasının gerekçesi; aslında paternlerin burada anlatılan prensipleri kalıplaştıran çözümler olmalarıdır. Dolayısıyla paternlere giriş öncesinde bu konular ele alınarak okuyucunun bilinç düzeyinin geliştirilmesi hedeflenmiştir. Ayrıca çeşitli kod metriklerinin (kararsızlık, soyutluk vs) hesaplandığı formül ve grafikler yine bu bölümde ele alınmıştır. Verilen örnekler 3 dili de kapsamaktadır.
3. Dizayn Paternlere Giriş ve Temel Kavramlar : Bu bölümde patern, antipatern, idiom gibi kavramlar ele alınmıştır. Verilen örnekler 3 dili de kapsamaktadır.
Nesne Oluşturulmasına/Yaratılmasına Ait (Creational) Patern’ler : Nesne yaratılışına ilişkin GOF patern’leri (Singleton, Abstract Factory, Object Pool vb) bu bölümde ele alınmıştır. Verilen örnekler 3 dili de kapsamaktadır.
4. Davranışsal Paternler : Nesnelerin davranışlarına ilişkin GOF patern’leri (Observer, Command, State, Mediator vb) bu bölümde ele alınmıştır. Verilen örnekler 3 dili de kapsamaktadır.
5. Yapısal Paternler : Bu bölüm yapısal paternler (Facade, Decorator, Adapter vb) diye kategorize edilen paternleri ele almaktadır. Verilen örnekler 3 dili de kapsamaktadır.
6. Yazılım Mimarisi ve Mimari Paternler : Yazılım mimarisini ilgilendiren ve GOF sistematiğinde yer almayan (MVC, MVVM, MVP, Model2, PM, Dependency Injection, Repository, Front Controller, Domain Model, ActiveRecord, TransactionScript, SpecialCase, vb ) gibi paternler bu bölümün ana temasını teşkil etmektedir. Bu bölümdeki örneklerde önceki bölümlerden farklı olarak sadece C# programlama dili ve .NET teknolojileri kullanılmıştır. Bunun sebebi; yazarın danışman veya yazılım mimarı olarak görev aldığı kurumsal (enterprise) seviyedeki projelerdeki deneyimlerinin .NET teknolojileri üzerine olmasıdır.
7. Proje Örnekleri : Bu bölümde pek çok okuyucunun bizlerden talep ettiği, gerçek hayatta geliştirilen büyük projelerden kesitler örneklenmektedir. Böylece okuyucunun bu bölüme kadar öğrendiği bilgilerin kullanıldığı daha büyük çaplı projelerde bilginin deneyime dönüşmesi hedeflenmektedir. Şüphesiz ki -bizlerin proje diye isimlendirdiği- gerçek hayattaki uygulamalar oldukça kapsamlı olmakta ve bolca kod tekrarı içermektedir. Dolayısıyla bu bölümde bir projenin bütünü değil kitabın konularıyla ilintili olan kesitleri örnek olarak verilmektedir. Aksi takdirde tek bir projenin bile bütünü bu kitaba konulsa sayfa sayısı 2000+ olan kullanışsız bir kitabın ortaya çıkması kaçınılmaz olurdu. Dolayısıyla bu bölümde bu durumun gözetildiği bir tarzda ve farklı teknolojilerden (ASP.NET, Android, Web Servis) kesitler yer almaktadır.
8. Yazılım Geliştirme Sürenin Modellenmesi : Bu bölümde okuyucuya genel kültür kazandıracak ölçüde yani fazla detaya girilmeden (Sıra dışı Programlama, Rational Unified Process, CRC) gibi yöntemler ele alınmaktadır.