Yazılım Mühendisliği

Tasarım ve Uygulama

Dr. Öğr. Üyesi Oğuz Emre Kural

2026

Öğrenme kazanımları

Bu dersin sonunda:

  • Tasarım ile uygulamanın neden iç içe yürüdüğünü ve yap ya da satın al kararını açıklayabilecek,
  • Bir sistemin nesne yönelimli tasarımını bağlam, mimari, nesne sınıfları, dinamik modeller ve arayüz belirtimi adımlarıyla geliştirebilecek,
  • Bir tasarım deseninin dört öğesini ve desenlerin üç ailesini (yaratımsal, yapısal, davranışsal) tanıyabilecek,
  • Gözlemci, Cephe, Yineleyici ve Süsleyici desenlerini günlük hayattan senaryolar ve kod örnekleriyle açıklayıp uygun problemlere eşleyebilecek,
  • Yeniden kullanımın düzeylerini ve maliyetlerini, yapılandırma yönetiminin dört etkinliğini ve ana-hedef geliştirmeyi açıklayabilecek,
  • Açık kaynak geliştirmenin iş modellerini ve GPL, LGPL, BSD/MIT lisanslarının sonuçlarını değerlendirebileceksiniz.

Tasarım ve Uygulamaya Giriş

Küçük sistem, büyük sistem

Tasarım ve uygulama iç içe yürür

Gösterimi uygulama belirler

İlk büyük karar: yap mı, satın al mı?

Bu bölümün iki amacı

1 · Modellemeyi uygulamaya dökmek

Sistem modellemenin ve mimari tasarımın, nesne yönelimli bir yazılım tasarımında nasıl kullanıldığını göstermek. Örnek: kırsal hava istasyonu.

2 · Programlama kitaplarında olmayanlar

Programlama kitaplarında genellikle anlatılmayan önemli uygulama konuları: yeniden kullanım, yapılandırma yönetimi, ana-hedef geliştirme ve açık kaynak.

Örnek sistem: kırsal hava istasyonu

Özet: Tasarım ve Uygulamaya Giriş

  • Tasarım ve uygulama iç içe yürür; her zaman bir tasarım vardır, ama her zaman ayrıntılı belgelenmez.
  • Gösterim seçimi uygulama teknolojisine bağlıdır.
  • İlk büyük karar: yap mı, satın al mı? Hazır ürünlerde tasarım yapılandırmaya dönüşür.

Geliştirdiğiniz ya da kullandığınız bir uygulamayı düşünün: Sıfırdan yazmak mı, hazır bir ürünü uyarlamak mı daha mantıklı olurdu? Neden?

Nesne Yönelimli Tasarım: Süreç, Bağlam ve Mimari

Nesne yönelimli sistem

Kavramdan ayrıntılı tasarıma beş etkinlik

1 · Sistem bağlamı: hangi sistemlerle çevrili?

Bağlam modeli ve etkileşim modeli

Sistem bağlam modeli

Yapısal bir modeldir: geliştirilen sistemin ortamındaki diğer sistemleri gösterir. İlişkiler basit bağlantılarla çizilir.

Etkileşim modeli

Dinamik bir modeldir: sistem kullanılırken çevresiyle nasıl etkileştiğini gösterir. Çok ayrıntıya girmeyen soyut bir yaklaşım için kullanım durumu modeli kullanılır.

Hava istasyonunun kullanım durumları

Kullanım durumu açıklaması: Havayı bildir

Alan Açıklama
Aktörler Hava bilgi sistemi, hava istasyonu
Veri Toplama döneminde ölçülen yer ve hava sıcaklıklarının, hava basıncının ve rüzgâr hızının en yüksek, en düşük ve ortalama değerleri; toplam yağış; beş dakikada bir örneklenen rüzgâr yönü.
Uyaran Hava bilgi sistemi istasyonla bir uydu bağlantısı kurar ve verinin iletilmesini ister.
Tepki Özetlenmiş veri hava bilgi sistemine gönderilir.
Notlar İstasyonlardan genellikle saatte bir rapor istenir; bu sıklık istasyona göre farklı olabilir ve ileride değişebilir.

2 · Mimari: dinleyici modeli

Veri toplama alt sisteminin mimarisi

Özet: Nesne Yönelimli Tasarım: Süreç, Bağlam ve Mimari

  • Nesneler kendi durumunu tutar ve işlemler üzerinden konuşur; değişiklik yerel kalır.
  • Tasarım beş etkinlikten oluşur, ama sıralı değildir; geri dönüşler doğaldır.
  • Bağlam modeli yapısal, kullanım durumu modeli dinamik bakışı verir.
  • Hava istasyonu, alt sistemlerin ortak bir altyapıyı dinlediği bir dinleyici mimarisi kullanır.

Hava istasyonunun “Durumu bildir” ve “Yeniden yapılandır” kullanım durumlarını tablo biçiminde açıklayın.

Nesne Sınıfları ve Tasarım Modelleri

Nesneleri nasıl buluruz?

Bu aşamada temel nesneler hakkında bazı fikirlerimiz vardır; tasarım ilerledikçe onları iyileştiririz. 1980’lerden beri önerilen üç yol:

1 · Dilbilgisi analizi

Sistemin doğal dil açıklamasında isimler nesne ve öznitelik, fiiller işlem olur (Abbott, 1983).

2 · Somut şeyler

Uygulama alanındaki şeyler (uçak), roller (yönetici), olaylar (istek), etkileşimler (toplantı), yerler (ofis), birimler (şirket) (Wirfs-Brock ve ark., 1990).

3 · Senaryo analizi

Kullanım senaryoları tek tek incelenir; her senaryo için gereken nesneler, öznitelikler ve işlemler belirlenir (Beck ve Cunningham, 1989).

Dilbilgisi analizi: açıklamayı okumak

Pratikte birkaç kaynak birlikte

Hava istasyonunun nesne sınıfları

Alan bilgisi yeni öznitelikler getirir

Aletler bozulabilir

İstasyonlar uzak yerlerdedir; arızalar otomatik bildirilmeli. → Aletlerin doğru çalıştığını denetleyen öznitelik ve işlemler (test()).

Çok sayıda istasyon

İletişimde ayırt edilebilmeleri için her istasyonun kendi kimliği olmalı. → kimlik özniteliği.

Farklı alet türleri

İstasyonlar farklı zamanlarda kurulur; aletler farklı olabilir. → Her aletin kimliği ve bir alet bilgileri veritabanı.

Bu aşamada nesnelerin kendisine odaklanılır; nasıl gerçekleştirileceği sonraya bırakılır.

Ortak özellikler: Alet üst sınıfı

Tasarım modelleri: gereksinim ile kod arasındaki köprü

Ne kadar ayrıntı? Sürece bağlı

Soyut modeller yeter

Gereksinim mühendisleri, tasarımcılar ve programcılar yakın çalışıyorsa; kararlar gerçekleştirim sırasında, gayriresmî konuşmalarla verilir. Çevik geliştirmede beyaz tahtadaki taslaklar yeterli olabilir.

Ayrıntılı modeller gerekir

Plana dayalı süreçlerde ve bağlantılar dolaylıysa: sistem kurumun bir yerinde tasarlanıp başka bir yerinde gerçekleştiriliyorsa. Herkesin tasarımı aynı anlaması gerekir.

UML’de 14 diyagram türü var, ama çoğu yaygın kullanılmaz. Üretilen model sayısını en aza indirmek, tasarımın maliyetini ve süresini düşürür.

İki tür tasarım modeli, üç faydalı model

Alt sistem modeli: paketler

Özet: Nesne Sınıfları ve Tasarım Modelleri

  • Nesneler dilbilgisi analizi, somut şeyler ve senaryolar birlikte kullanılarak bulunur; alan bilgisi bunları tamamlar.
  • Ortak özellikler bir üst sınıfta toplanır.
  • Tasarım modelleri soyut ama programcıya yetecek kadar ayrıntılı olmalı; ayrıntı düzeyi sürece bağlıdır.
  • Yapısal ve dinamik modeller; özellikle alt sistem, sıra ve durum makinesi modelleri.

İki ve üç boyutlu şekiller için en az beş farklı şekil sınıfı içeren bir kalıtım hiyerarşisi tasarlayın.

Dinamik Modeller ve Arayüzler

Sıra modeli: her önemli etkileşim için bir tane

Sıra diyagramı: veri toplama

Durum makinesi modeli: hava istasyonu

5 · Arayüz belirtimi

Veri gösterimi gizli kalır

Nesne ve arayüz arasında 1:1 ilişki yok

Özet: Dinamik Modeller ve Arayüzler

  • Sıra modelleri nesneler arasındaki etkileşimlerin sırasını gösterir; açık uç eşzamansız, dolu uç eşzamanlı mesajdır.
  • Durum makinesi modelleri bir nesnenin mesaj ve olaylara göre durum değiştirmesini gösterir; her nesne için gerekmez.
  • Arayüzler paralel geliştirmeyi sağlar; veri gösterimini gizler, bakımı kolaylaştırır.

Veri toplama alt sistemi ile hava verisini toplayan aletler arasındaki etkileşimi bir sıra diyagramıyla gösterin.

Tasarım Desenleri

Fikrin kökeni: mimar Christopher Alexander

Binalardan yazılıma

Alexander (1979), bina tasarımında doğası gereği hoş ve etkili bazı ortak desenler olduğunu öne sürdü. Desen, bir problemin ve çözümünün özünün tanımıdır; çözüm farklı ortamlarda yeniden kullanılabilir.

Ayrıntılı bir belirtim değil

Desen, birikmiş bilgelik ve deneyimin tanımıdır: ortak bir probleme denenmiş bir çözüm.

“Desenler ve desen dilleri, en iyi pratikleri ve iyi tasarımları anlatmanın, deneyimi başkalarının yeniden kullanabileceği biçimde yakalamanın yoludur.” (Hillside Group)

Desenler nesne yönelimli tasarımı değiştirdi

Denenmiş çözümler

Ortak problemlere sınanmış çözümler sunar; tasarımcıların bilgisini ve deneyimini yeniden kullanmanın yoludur.

Ortak sözcük dağarcığı

Tasarımı, kullandığınız desenleri söyleyerek anlatabilirsiniz: “Burada Gözlemci kullandık.”

Kaynaklar

“Dörtlü Çete”nin (Gang of Four) 1995 tarihli kitabındaki 23 desen; Siemens’teki yazarların desen yönelimli yazılım mimarisi (POSA) serisi.

Desenler genellikle kalıtım ve çok biçimlilik gibi nesne özelliklerine dayanır; ama deneyimi bir desende toplama fikri her tür tasarıma uygulanabilir.

Desen bir tarif değil, bir plandır

Algoritma: yemek tarifi

Hedefe götüren kesin adımlar dizisidir. Tarifi izleyen herkes aynı adımları aynı sırayla uygular.

1. suyu kaynat · 2. makarnayı ekle · 3. 9 dakika pişir

Desen: mimari plan

Sonucu ve özelliklerini gösterir; nasıl inşa edeceğiniz size kalır. Aynı desen iki programda farklı kodlarla gerçekleştirilir.

Bir deseni kütüphane fonksiyonu gibi kopyalayıp yapıştıramazsınız; genel fikri kendi programınıza uyarlarsınız.

Desenlerin ölçeği

Bir desenin dört temel öğesi

Desenlerin üç ailesi

Gözlemci (Observer): mağaza ve müşteri

Hikâyeden desene

Gözlemci: kitaptaki örnek

Gözlemci: çözümün yapısı

Gözlemci: kodda

Gözlemci: ne zaman kullanılır?

Gözlemci: sonuçlar

Getiri: en az bağımlılık

Konu yalnızca soyut Gözlemci’yi bilir. Yeni bir görüntü ya da abone türü eklemek konuyu değiştirmez (Açık/Kapalı ilkesi). İlişkiler çalışma sırasında kurulup koparılabilir.

Bedel

Konu görüntüleri tanımadığı için görüntüye özel iyileştirmeler pratik değildir. Bir değişiklik, bazıları gereksiz bir güncelleme zinciri başlatabilir. Abonelerin hangi sırayla haber alacağı garanti edilmez.

Bugün aynı fikir olay dinleyicilerinde (event listener), yayınla-abone ol sistemlerinde ve arayüz çatılarının reaktif durum yönetiminde yaşıyor.

Cephe (Façade): dağınık arayüzleri toplamak

Cephe: telefonla sipariş

Cephe: kodda

Cephe: sonuçlar

Ne zaman?

Karmaşık bir alt sistemin bir kısmına sade bir arayüz gerektiğinde; alt sistemi katmanlara ayırırken her katmanın girişine bir cephe koymak için.

Getiri

İstemci alt sistemin karmaşıklığından yalıtılır. Alt sistem değişince yalnızca cephe değişir; gerekirse alt sisteme doğrudan erişim de açık kalır.

Bedel

Cephe zamanla her sınıfa bağlı bir “tanrı nesnesi”ne dönüşebilir. Çok büyürse konulara göre ek cephelere bölün.

Adaptör ile karıştırmayın: Adaptör var olan bir arayüzü beklenen arayüze uyarlar ve genelde tek nesneyi sarar; Cephe ise bütün bir alt sisteme yeni ve daha basit bir arayüz tanımlar.

Yineleyici (Iterator): koleksiyondan bağımsız erişim

Yineleyici: Roma’yı gezmenin üç yolu

Yineleyici: aynı ağaç, iki gezinme

Yineleyici: yapı ve kod

Yineleyici: sonuçlar

Ne zaman?

Karmaşık bir veri yapısını istemciden gizlemek; gezinme kodunun her yerde tekrarlanmasını önlemek; henüz bilinmeyen yapılarda da aynı kodla gezinmek istediğinizde.

Getiri

Gezinme koleksiyondan ayrı bir sorumluluk olur. Yeni koleksiyon ve yineleyici eklemek istemciyi bozmaz. Her yineleyici kendi konumunu tutar: paralel gezinme, durup sürdürme.

Bedel

Basit bir liste için gereksiz karmaşıklıktır. Bazı özel koleksiyonlarda doğrudan erişimden daha yavaş olabilir.

Aynı fikir: veritabanı imleçleri (cursor), dosyayı satır satır okumak, sayfa sayfa gelen API sonuçları.

Süsleyici (Decorator): çalışma zamanında işlev eklemek

Süsleyici: kalıtım neden yetmiyor?

Süsleyici: kanalları katman katman sarmalamak

Süsleyici: kodda

Süsleyici: sonuçlar

Günlük hayattan

Giysi katmanları: Üşüyünce kazak, yağmur yağınca yağmurluk giyersiniz. Katmanlar sizin parçanız değildir; gerekince çıkarırsınız.

Getiri

Alt sınıf yazmadan davranış eklenir; katmanlar çalışma sırasında eklenip çıkarılır ve birleştirilir. Büyük bir sınıf küçük sorumluluklara bölünür.

Bedel

Yığının ortasındaki bir katmanı çıkarmak zordur. Davranış katmanların sırasına bağlı kalabilir. Katmanları kuran kod karmaşık görünebilir.

Süsleyici nesnenin dışını (kabuğunu) değiştirir; Strateji deseni ise içini, yani algoritmasını.

Dört desen tek bakışta

Desen Aile Problem Fikir Benzetme
Gözlemci Davranışsal Bir değişiklik, önceden bilinmeyen nesneleri ilgilendiriyor Abone listesi ve bildir() Dergi aboneliği
Cephe Yapısal Karmaşık bir alt sistemi kullanmak zor Tek ve sade bir giriş arayüzü Telefonla sipariş
Yineleyici Davranışsal Farklı koleksiyonlarda aynı biçimde gezinmek Gezinmeyi ayrı bir nesneye taşımak Roma’yı gezmenin yolları
Süsleyici Yapısal Her birleşime alt sınıf yazmadan davranış eklemek Aynı arayüzle sarmalamak Giysi katmanları

Desenler kavramı yeniden kullanır

Çalıştırılabilir bileşeni yeniden kullanmak

Gerçekleştiricinin ayrıntılı kararlarına bağlı kalırsınız: kullanılan algoritmalar, arayüzdeki nesne ve türler. Bu kararlar gereksinimlerinizle çelişirse yeniden kullanım imkânsızlaşır ya da sisteme verimsizlik katar.

Deseni yeniden kullanmak

Fikri yeniden kullanırsınız; gerçekleştirimi geliştirdiğiniz sisteme göre uyarlarsınız.

Desen kullanmak deneyim ister

Desenlere yöneltilen eleştiriler

Zayıf dilin yaması

Bazı desenler dilde eksik bir özelliği kapatır. Örneğin Strateji, birçok modern dilde basit bir lambda ifadesine dönüşür.

Körü körüne uygulama

Desen bir şablondur. Projeye uyarlamadan kitaptaki yapıyı harfi harfine kopyalamak verimsiz çözümler doğurur.

Gereksiz kullanım

Yeni öğrenen her yerde desen görür: “Elinde çekiç olana her şey çivi görünür.” Basit kod yeterliyse desen gereksizdir.

Önce basit çözümü yazın; desen, problem gerçekten ortaya çıktığında devreye girer.

Özet: Tasarım Desenleri

  • Desen, ortak bir problemin ve çözümünün özüdür; tarif değil, plandır.
  • Dört öğe: ad, problem, çözüm, sonuçlar. Üç aile: yaratımsal, yapısal, davranışsal.
  • Gözlemci abonelere haber verir; Cephe karmaşıklığı tek arayüzün arkasına saklar; Yineleyici gezinmeyi koleksiyondan ayırır; Süsleyici davranışı katman katman ekler.
  • Desenler kavramı yeniden kullanır; etkili kullanmak deneyim ister.

Kullandığınız bir uygulamada aynı verinin birden çok görüntüsü var mı? Gözlemci deseniyle nasıl tasarlanırdı?

Yeniden Kullanım ve Yapılandırma Yönetimi

Yazılım mühendisliği için üç önemli uygulama konusu

Yeniden kullanım

Modern yazılımların çoğu, var olan bileşen ya da sistemlerin yeniden kullanılmasıyla kurulur. Var olan koddan olabildiğince yararlanın.

Yapılandırma yönetimi

Geliştirme boyunca her bileşenin birçok sürümü oluşur. Bunlar izlenmezse sisteme yanlış sürümler girer.

Ana-hedef geliştirme

Üretim yazılımı genellikle geliştirildiği bilgisayarda çalışmaz: bir bilgisayarda (ana) geliştirilir, başka bir bilgisayarda (hedef) çalışır.

Sıfırdan yazmaktan yeniden kullanmaya

Yeniden kullanımın dört düzeyi

Kazançlar ve maliyetler

Neden yapılandırma yönetimi?

Yapılandırma yönetiminin dört etkinliği

Araçlar

Sürüm yönetimi

Git (çok merkezli, çok ekipli geliştirme), Subversion. GitHub, GitLab gibi platformlar Git etrafında kapsamlı araçlar sunar.

Bütünleştirme ve derleme

Dile yerleşik araçlar ya da ayrı bir araç takımı: GNU derleme sistemi, Maven, Gradle, npm…

Sorun izleme

Bugzilla, Jira; GitHub ve GitLab’in kendi “issues” bölümleri.

Bu araçlar genellikle Eclipse ya da VS Code gibi bir tümleşik geliştirme ortamına (IDE) yerleştirilir.

Bugün: dallar, birleştirme isteği ve sürekli entegrasyon

Özet: Yeniden Kullanım ve Yapılandırma Yönetimi

  • Yeniden kullanım dört düzeyde olur: soyutlama, nesne, bileşen, sistem; kazançlarının yanında arama, satın alma, uyarlama ve bütünleştirme maliyetleri vardır.
  • Yeniden kullanım, projenin başında düşünülmelidir.
  • Yapılandırma yönetimi: sürüm yönetimi, sistem bütünleştirme, sorun izleme, sürüm dağıtımı.

Kod daha büyük bir sistemle bütünleştirildiğinde sorunlar ortaya çıkabilir. Yapılandırma yönetimi bu sorunları ele alırken nasıl yardımcı olur?

Ana-Hedef Geliştirme

Geliştirme platformu ve çalıştırma platformu

Platformlar aynı olabilir, farklı olabilir

Aynı platform: Java

Hedef ortam Java Sanal Makinesidir (JVM). İlke olarak her bilgisayarda aynıdır; program bir makineden diğerine taşınabilir, aynı makinede geliştirilip sınanabilir.

Farklı platform: gömülü ve mobil

Geliştirme ve çalıştırma platformları farklıdır. İki yol var:

  1. Yazılımı sınamak için hedefe taşımak
    2. Geliştirme makinesinde bir benzetici (simulator) çalıştırmak

Benzeticiler (simulator)

Ara katman ve lisans kısıtı

Bir geliştirme platformunun araçları

Derleyici ve sözdizimi güdümlü düzenleyici

Kodu oluşturmak, düzenlemek, derlemek

Hata ayıklayıcı

Dile özgü hata ayıklama sistemi

Grafik düzenleme araçları

ör. UML modellerini düzenleme

Test araçları

ör. JUnit: yeni sürümde testleri otomatik çalıştırır

Yeniden düzenleme ve görselleştirme

Refactoring ve program görselleştirme

Yapılandırma yönetimi araçları

Sürümleri yönetmek, sistemi bütünleştirip derlemek

Ayrıca: statik çözümleyiciler gibi özel araçlar (Bölüm 12) ve ekipler için değişiklik ve yapılandırma yönetimini, belki gereksinim yönetimini çalıştıran ortak bir sunucu.

Tümleşik geliştirme ortamı (IDE)

Konuşlandırma kararları: bileşen hangi platformda?

Gömülü sistemde hedef genellikle tek bilgisayardır; dağıtık sistemlerde ise bir karar gerekir.

Donanım ve yazılım gereksinimleri

Belirli bir donanım mimarisi için tasarlanmış ya da başka bir yazılıma dayanan bileşen, bunu sağlayan platforma konuşlandırılmalıdır.

Erişilebilirlik gereksinimleri

Yüksek erişilebilirlik isteyen sistemlerde bileşen birden fazla platforma konuşlandırılır; biri çökerse diğeri devreye girer.

Bileşenler arası iletişim

Çok iletişim kuran bileşenler aynı ya da fiziksel olarak yakın platformlara konur; böylece gecikme azalır.

UML konuşlandırma diyagramı: hava istasyonu

Gömülü hedefin özellikleri

Bugün: hedef ortamı paketlemek

Özet: Ana-Hedef Geliştirme

  • Yazılımın çoğu ana makinede geliştirilir, hedef makinede çalışır; platform = donanım + işletim sistemi + destek yazılımı.
  • Platformlar farklıysa kod hedefe taşınır ya da bir benzetici kullanılır; lisans kısıtları taşımayı zorunlu kılabilir.
  • Araçlar bir IDE içinde toplanır; dağıtık sistemlerde konuşlandırma kararları UML konuşlandırma diyagramı ile belgelenir.

Açık Kaynak Geliştirme

Kökenler: özgür yazılımdan açık kaynağa

Özgür Yazılım Vakfı (FSF)

Kaynak kod mülk olmamalı; kullanıcılar onu her zaman inceleyip istedikleri gibi değiştirebilmeli.

Varsayım: kodu kullanıcılar değil, küçük bir çekirdek ekip geliştirir ve denetler.

Açık kaynak (Raymond, 2001)

İnternet üzerinden çok daha geniş bir gönüllü geliştirici topluluğu toplanır; çoğu aynı zamanda kodun kullanıcısıdır.

İlke olarak her katkıcı hata bildirebilir, düzeltebilir, yeni özellik önerebilir.

Uygulamada: çekirdek ekip değişiklikleri denetler

İnternetin ve yazılım mühendisliğinin omurgası

Açık kaynak ürün kullanmanın iki kazancı

Ucuz ya da ücretsiz

Genellikle ücretsiz indirilir.

Belgelendirme ve destek isterseniz ödeme yapmanız gerekebilir; ama bu maliyet çoğunlukla düşüktür.

Çok güvenilir

Yaygın kullanılan sistemlerin, sorunları geliştiriciye bildirip yeni sürüm beklemek yerine kendisi düzelten geniş bir kullanıcı kitlesi vardır.

Hatalar, mülk yazılımda olduğundan daha hızlı bulunup onarılır.

Kazançlar ve riskler

Bir yazılım şirketinin iki sorusu

Karar verirken bakılacak beş etken

1 · Olgun bir çözüm var mı?

Alanınızda yaygın kullanılan, bakımı süren bir açık kaynak sistem var mı?

2 · Uyumluluk ve entegrasyon

Mevcut sistemlerinizle birlikte çalışabilir mi; veri biçimleri ve arayüzler uyuşuyor mu?

3 · Lisans koşulları

GPL, LGPL, BSD, MIT: ürününüzü açmak zorunda kalır mısınız?

4 · Özelleştirme ve bakım

Ne kadar değiştirmeniz gerekecek; değişiklikleri kim sürdürecek?

5 · Ekibin deneyimi

Ekip bu teknolojiyi ve açık kaynak çalışma biçimini tanıyor mu?

İş modeli: ürünü değil, desteği satmak

İki model yakından

Çift lisanslama

Aynı kod iki lisansla sunulur: GPL sürümü ücretsizdir; ürününü kapalı tutmak isteyen şirket ticari lisans satın alır.

Örnek: MySQL veritabanı.

Barındırılan hizmet (SaaS)

Kod açıktır; isteyen kendi sunucusuna kurar. Ama çoğu kullanıcı kurup işletmek yerine üreticinin işlettiği hizmeti kullanır ve abonelik öder.

Örnek: GitLab’ın bulut hizmeti.

Hangi model seçilirse seçilsin, başarı güçlü bir çekirdek bakım ekibine ve katkıları yöneten etkili bir sürece bağlıdır.

Kaygılar ve gerçekler

Kaygı: gizli bilgi

Bazı şirketler, açık kaynağın gizli iş bilgisini rakiplere açacağından çekinir.

Küçük şirket için güvence

Yazılımınızı açarsanız müşteriler, şirketiniz kapansa bile yazılımı destekleyebileceklerinden emin olur.

Kodu yayımlamak topluluk getirmez

Başarılı açık kaynak ürünlerin çoğu platform ürünüdür, uygulama değil. GitHub’da yalnızca birkaç kez indirilmiş binlerce proje var.

Ama erişim güvencesi verir

Yazılımın geleceğinden kaygılanan kullanıcılar kendi kopyalarını alır; yazılıma erişimi kaybetmezler.

7.4.1 Açık kaynak lisanslama

Üç genel lisans modeli

MIT lisansı yakından

Lisans neden önemli?

Bayersdorfer’in altı önerisi

Bugün: lisans uyumu otomatikleşti

Özet: Açık Kaynak Geliştirme

  • Açık kaynak: kaynak kod yayımlanır, gönüllüler katılır; ama değişiklikleri bir çekirdek ekip denetler.
  • Kazançlar: düşük maliyet, güvenilirlik, satıcıya bağımlılığın azalması. Riskler: topluluk, entegrasyon, lisans, devamlılık.
  • İş modelleri: destek, abonelik, çift lisanslama, SaaS. Kodu açmak topluluk getirmeyi garanti etmez.
  • Lisanslar: GPL karşılıklı, LGPL bağlanmaya izin verir, BSD/MIT karşılıklı değildir (MIT: bildirimi koru, garanti yok).

Müşteriye göre yapılandırılan bir ürünü olan küçük bir şirket, sistemin yapılandırmasına katılmak isteyen büyük bir müşteri kazanmak üzere. Ürünü açık kaynak yapmak neden iyi bir fikir olabilir?

Bölüm Özeti

Hangi soru, hangi kavram?

Soru Kavram Akılda kalacak
Nasıl tasarlarız? Nesne yönelimli tasarım süreci Bağlam → mimari → nesneler → modeller → arayüzler; adımlar iç içe ilerler
Hangi nesneler? Nesne tanımlama Dilbilgisi çözümlemesi, somut varlıklar, senaryolar; alan bilgisi ve sezgi
Nesneler nasıl etkileşir? Sıra ve durum modelleri Sıra modeli bir senaryoyu, durum modeli bir nesnenin yaşamını anlatır
Bileşenler nasıl birleşir? Arayüz belirtimi Arayüz gerçekleştirmeden ayrılır; ekipler paralel çalışır
Bu problem çözüldü mü? Tasarım desenleri Ad, problem, çözüm, sonuçlar; üç aile; kod değil, kavram yeniden kullanılır
Kodu nasıl yönetiriz? Yeniden kullanım, yapılandırma yönetimi Önce var olanı arayın; her sürümü izleyin
Nerede çalışacak? Ana-hedef geliştirme Geliştirme ve çalıştırma platformu çoğu zaman farklıdır
Kodu açmalı mıyız? Açık kaynak ve lisanslar Lisans, ürününüzü açmak zorunda kalıp kalmayacağınızı belirler

Akılda kalacaklar

  • Tasarım ve uygulama iç içe etkinliklerdir; tasarımın ayrıntı düzeyi sistem türüne ve süreç yaklaşımına bağlıdır.
  • Nesne yönelimli tasarım; mimariyi kurmayı, nesneleri bulmayı, tasarımı statik ve dinamik modellerle anlatmayı ve bileşen arayüzlerini belgelemeyi kapsar.
  • Arayüzler, başka nesnelerin kullanabileceği kadar kesin tanımlanmalıdır; UML’de «interface» kalıbı kullanılır.
  • Yazılım geliştirirken her zaman yeniden kullanımı düşünün: bileşenler, hizmetler ya da bütün sistemler.
  • Yapılandırma yönetimi, birlikte çalışan bir ekip için vazgeçilmezdir.
  • Açık kaynak geliştirmede kaynak kod herkese açıktır; birçok kişi değişiklik ve iyileştirme önerebilir.

Alıştırmalar

  1. Hava istasyonunun Durum bildir ve Yeniden yapılandır kullanım durumlarını tablo gösterimiyle belirtin; gereken işlevler için makul varsayımlar yapın.
  2. Bir hasta kayıt sistemi nesne yönelimli yaklaşımla geliştiriliyor. En az altı kullanım durumu içeren bir kullanım durumu diyagramı çizin.
  3. Aşağıdaki nesne sınıflarını UML gösterimiyle, öznitelik ve işlemleriyle tasarlayın: telefondaki mesajlaşma sistemi, kişisel bilgisayar yazıcısı, kişisel müzik sistemi, banka hesabı, kütüphane kataloğu.

Alıştırmalar (devam)

  1. Şekiller 2B ve 3B olarak sınıflandırılabilir. En az beş farklı şekil sınıfı içeren bir kalıtım hiyerarşisi tasarlayın.

  2. Hava istasyonunun veri toplama alt sistemi ile hava verisini toplayan aletler arasındaki etkileşimi sıra diyagramlarıyla gösterin.

  3. Aşağıdaki sistemlerdeki olası nesneleri belirleyip nesne yönelimli bir tasarım geliştirin:

    • Bir iş arkadaşı grubunun toplantı ve randevularını planlayan, herkesin ajandasında ortak boşluk bulan ortak ajanda sistemi,
    • Sürücünün kartını pompadaki okuyucuya okuttuğu, kartın doğrulanıp yakıt sınırının belirlendiği, tam otomatik bir akaryakıt istasyonu.

Alıştırmalar (devam)

  1. Bir grup insan toplantı ayarlarken ortak ajanda sistemindeki nesnelerin etkileşimini gösteren bir sıra diyagramı çizin.
  2. Ortak ajanda ya da akaryakıt istasyonu sistemindeki olası durum değişikliklerini gösteren bir UML durum diyagramı çizin.
  3. Kod daha büyük bir sistemle bütünleştirildiğinde sorunlar ortaya çıkabilir. Yapılandırma yönetimi bu sorunları ele alırken nasıl yardımcı olur?
  4. Her müşteri için özel yapılandırdığı bir ürünü olan küçük bir şirket, müşteri tabanını iki katına çıkaracak yeni bir sözleşmeye teklif verecek. Yeni müşteri sistemin yapılandırılmasına katılmak istiyor. Bu durumda ürünü açık kaynak yapmak neden iyi bir fikir olabilir?