27 Nisan 2010 Salı

UML ve Modelleme – Bölüm 11 (4+1 Bakış)

Önceki 10 bölümde, UML diyagramlarının sistem yaşam döngüsünün farklı aşamalarında kullanıldığını görmüştük. Bu makalemizle birlikte UML ve Modelleme serimizi sonlandırmış oluyoruz. Geçmişteki UML makalelerimize şöyle bir göz atalım;
Ayrıca analiz süreci ile ilgili aşağıdaki makalelerimiz de ilginizi çekebilir;
Bu yazımızda 4+1 bakışı ile UML diyagramlarını sınıflandıracağız. 4+1 bakışı aslında sistemin yazılım yaşam döngüsündeki görünüşünü anlatır. Her bir bakış sistemin nasıl modelleneceğini gösterir.
image

4+1 Bakışları
  • Tasarım Bakışı(Desing view): Tasarım bakışı sistemin yapıla bakışı olarak tanımlayabiliriz. Sınıf(Class) ve nesne (Object) diyagramları sistemin tasarım bakışını oluşturur.
  • İşlem Bakışı(Process view): Sistemin dinamik davranışlarını işlem bakışında sınıflandırılır. Durum(State), aktivite(activity), ardışık(sequence) ve işbirliği(collaboration) diyagramları bu bakışta kullanılır.
  • Gerçekleştirme Bakışı(Component View): Bileşen(Component) diyagramları kullanılarak sistem modellemesinde modüllerin gruplandırılmasında gerçekleştirme bakışı kullanılır.
  • Dağılım Bakışı (Deployment View):sistemin donanımsal olarak dağılımını gösteren bakış açısıdır. Dağılım(Deployment) diyagramlar dağılım bakışında kullanılmaktadır.
  • Use case Bakışı(Use case View): +1 de yeralan bakış açısı ise use case bakışıdır. Use case diyagramlarda ve senaryolarda kullanılır.
Referanslar
Neslihan ÇALIŞKANEL

26 Nisan 2010 Pazartesi

Birim (Unit) Testinde Dikkat Edilecekler

Bundan önceki yazılarmızda Birim testleri ve TDD (Test Driven Development) ile ilgili genel bilgiler vermiştik.
TDD (Test Güdümlü Geliştirme);
Production kodunu yazmadan önce test kodlarını geliştirme yaklaşımıdır. Kısa development döngülerinin tekrarlanması üzerine kurulu bir yazılım geliştirme tekniğidir…  
Birim (Unit) testleri;
Birim testi bir yazılım projesindeki metotların, fonksiyonların doğru çalışıp çalışmadığını anlamak için oluşturulan testtir. Bir testin birim testi olabilmesi için test edilecek birimlerin ayrı ayrı ele alınması gerekmektedir. 
Şu andaki tecrübelerimizle (!), gerçek hayatta, Birim testlerinde nelere dikkat etmeliyiz bir göz atalım;
  1. Test fonksiyonları küçük ve hızlı olmalı. (Her check-inden sonra çalıştırmak ideal olacağı için.)
  2. Otomatik olarak çalışabilir olmalı.
  3. Bir buton click ile kolayca çalıştırılabilmeli.
  4. Code covarage yüksek olmalı ve ölçülebilmeli, gözlenmeli.
  5. Birim testinde hata alınan yer derhal düzeltilmeli.
  6. Sadece birimlerin işlevlerini test edecek şekilde olmalı.
  7. Testler başka testlere bağlı olmamalı, tek başına çalışabilmeli.
  8. Testler gerçek sınıflara yakın olmalı, aynı solution da olmalı.
  9. Test isimleri düzgün verilmeli, açıklayıcı ve hangi sınıf için hangi fonksiyon için yazıldığı herkes tarafından kolayca anlaşılmalı.
  10. 3rd party componentleri kullanırken de bekleneni kontrol etmeli.
  11. Test covarage mümkün olduğunca executing coverage’a yakın olmalı. Standart olarak executing covarage’ın % 80 i kadarını test covarage’ın kapsaması gerekmektedir. Zaten % 20’lik kalan yerde de veritabanına erişememe dosya sistemine erişememe gibi dışsal etkenler bulunmaktadır. Mock objeler kullandığımız için de bunların birçoğunu zaten bizim kapsamımızda da bulunmayacaktır.
  12. Sınırlar düzgün kapsanmalı, parametre olarak negatif, 0, nothing, pozitif değerler denenmesi gerekli ise hepsi yazılmalı. (Random generator yazılabilir ama mantıklı gelmedi.)
  13. Hata fırlatma yapılan kısımlarda da birim testler yazılmalı.
  14. Dosya, network sisteminden ya da başka kaynaklardan bağımsız olmalı.
  15. Birim testi yazılırken test uzmanı gibi düşünmeli. Nerelerde hata olabileceği düşünülmeli.
Armağan DÖKER, Ömer KİREMİTÇİ, Deniz KILINÇ

Online İtibar Nedir?

İnternet ve dijital içerikler, teknolojik örümcek ağlarıyla etrafımızı öyle bir sardı ki; orada yazılan herşeye inanır olduk. Bu sanal çıktılar hayatımız ve önemli kararlarımız için yönlendirici oldu, olmaya da devam ediyor. Aziz Google, muhterem Yahoo,  değerli Facebook, çılgın Twitter, LinkedIn, FriendFeed, Blogger, MySpace, YouTube … diye liste uzuyor. Peki burada yazılanların hepsi doğru mu, birileri size kızdığı veya sizinle rekabet ettiği için bu dünyayı kötüye kullanabilir mi? Elbette kullanabilir. Adınızı ve markanızı karalayabilir. Kısaca itibarınızı zedeleyebilir.
Internet stratejisti Atıf ÜNALDI, Türkiye’de Online İtibarın geldiği nokta ile ilgili şunları diyor: “Aslında Türkiye’de durum iyi. Hayatımda ilk defa bir teknolojik bilginin Türkiye’ye geç ulaşmasından memnunum. Zira özellikle Amerika’da e-devlet faaliyetlerinden tutun da, vatandaşlık bilgilerine kadar birçok bilgi internet üzerinden yapılabildiğinden, her türlü bilgiyi toplayıp, indeksleyen ve bu indekslediği bilgileri düzgün şekilde gösterebilen insan arama motorları son derece revaçta. Bu sayede, kişinin ödenmemiş elektrik faturasına kadar her türlü bilgisi internette parmaklarınızın ucunda bulunabiliyor. Bu sitelerin en rahatsız edici olanı intelius sonra Yahoo! ve People Search geliyor. Bu siteler bu bilgileri bir dedektif edası ile arayıp buluyor, indeksleyip inanılmaz kullanım yöntemleri ortaya çıkarıyor…”
Online itibar zedelenmesi genelde rastgele bir zamanda kötü bir tecrübe olarak karşımıza çıkar. Öylesine gezinirken istemediğimiz içeriği görür ve yıkılabiliriz. Ya da çok ilgisiz bir kaynaktan (arkadaştan, müşteriden vs.) e-posta veya benzeri yöntemlerle bilgilendirilerek yerin dibine gireriz. Kim bilir ne zamandır istemediğimiz o içerik orada duruyor?  Kaç kişi bundan etkilendi, bizimle ilgili olumsuz düşüncelere kapıldı?, belki de bir işi kaybettik? diye düşünmeden edemeyiz.

“Keşke daha önce bilseydik, içerik yayılmadan (izlenmeden, indekslenmeden)  harekete geçerdik…”
Başımıza böyle bir dert geldiğini en hızlı nasıl anlarız? (Daha önce bilseydik)
  1. Bizi ifade eden önemli kriter kelimelerle (şirket adı, ürün adı vb.) sık sık arama motorlarında, sosyal paylaşım sitelerinde ve sosyal ağlarda arama yapabiliriz. Efektif bir yöntem değildir.
  2. Online itibar izleme araçlarını kullanabiliriz, bu araçlara kısaca değinelim;
    • Google Alerts: Arama motoru mantığında çalışan bir Google haber servisidir. Şu günlerde Beta aşamasında olan servise http://www.google.com/alerts internet adresine girilerek ulaşılabilir. Öncelikle bir Google hesabına ihtiyaç vardır.
    • Yasni: Herhangi birisi ile ilgili ağ, kişi, resim ve diğer erişilebilir bilgileri arayabileceğimiz bir arama motorudur. LinkedIn, Google, Amazon, Technorati gibi birçok siteden bilgiler toplanabilir.
    • TweetBeep: Twitter için kullanabileceğimiz Google Alerts benzeri bir servistir. Seçimimize göre herhangi bir ürünle, şirketle ilgili yapılan paylaşımlar e-posta olarak alınabilir.
    • Technorati: Bloglar için tasarlanmış bir arama motorudur.
    • SocialMention: Kullanıcılar tarafından hakkınızda oluşturulan içerikleri bir arada toplamada kullanabileceğiniz bir araçtır. Twitter, Facebook, FriendFeed, YouTube, Digg ve Google gibi 100’ü aşkın siteyi kapsamaktadır. Seçilen anahtar kelime ile günlük e-posta alarak bilgilenmek mümkündür.
Başımıza böyle bir dert geldiğinde neler yapabiliriz, haklarımız nedir? (Harekete geçerdik)
  1. Öncelikle içeriği oluşturan kişi ile iletişime geçebilir, olumlu yaklaşım ile anlaşma ve ikna etme yöntemine gidebiliriz. Bu yöntem pozitif sonuç üretebileceği gibi aksine sizi daha çok hedef haline getirebilir, ters tepebilir.
  2. İlgili kişiyi ikna edemiyorsak, içeriğin yayınlandığı sitenin yetkililerine ulaşıp, şikayet edebiliriz. Uzun zaman alabilecek bir yöntemdir, hele ki işler kötüye gitmeye başlamış ise pek şansımız yok.
  3. Arama sonuçlarını eritme yöntemine gidilebilir. Olumsuz içeriğe sahip kaynağı en popüler 20 arama sonucundan dışarı atabilirsek önemli yol almış oluruz. Çünkü birçok kullanıcı arama motorlarında ilk 20 kayıt sonrasında sayfalarca ilerlemez, aradığını bulamadığını düşünüp, arama kriterlerini değiştirir.
  4. Türkiye’de 4 Mayıs 2007 tarihinde yürürlüğe giren 5651 nolu “internet ortamında yapılan yayınların düzenlenmesi ve bu yayınlar yoluyla işlenen suçlarla mücadele edilmesi hakkında kanun” isimli kanunun 9. Maddesi, kişinin haklarının ihlal edilmesi durumunda, cevap hakkının dava açmadan kullanılabileceğini öngörmektedir. Eğer içerik sağlayıcısı (web sitesinin sahibi) bölümü kapatmazsa, yer sağlayıcısına (hosting şirketine) başvurulabilir. Yine sonuç alınamazsa mahkeme yöntemine gidilebilir.
Referanslar
Deniz KILINÇ

24 Nisan 2010 Cumartesi

UML ve Modelleme – Bölüm 10 (Component ve Deployment Diyagramlar)

Önceki makalemizde UML modellemede kullanılan en önemli diyagram türlerinden biri olan Activity diyagramlarını incelemiştik. Bu makalemizde fiziksel diyagramlardan component ve deployment diyagramları inceleyeceğiz.
Component diyagramları, sistemin yazılım bileşenlerini ve birbirleri arasındaki bağlantının nasıl olduğunu gösteren diyagramlardır. Sisteme daha yüksek seviyeden yani bileşenler seviyesinden bakabilmeyi sağlarlar. Bileşenler “alt sistemleri” oluştururlar.
Component diyagramların diğer UML diyagramlarından farkı nedir?
  1. Component diyagramları sistemin uygulanma perspektifini gösterir.
  2. Component diyagramı içerisinde yer alan bileşenler; sistemdeki farklı tasarım öğelerinin gruplandırılmasını yansıtır. (Örn: sistemin sınıfları)
Sistemin uygulanabilirliğinde farklı bileşen tipleri kullanılabilir. Basit çalıştırılabilir bileşenler, kütüphane bileşenleri (sistem kütüphanelerini ve sistemdeki uygulama kütüphanelerini gösterir), dosya bileşenleri (kaynak kod dosyalarını ya da doküman dosyalarını gösterir. Örn: kullanıcı ara yüz dosyaları (HTML ya da JSP dosyaları). Son olarak, sistemin veritabanı tablolarını gösteren bileşenlerde kullanılabilir.
Component Diyagram Modellemesinde Kullanılan Elemanlar:

Component(Bileşen): Uygulamanın paylaştırılabilen parçalarıdır. Bir bileşen sistemin fiziksel yapı taşıdır.
2
Package(Paket): Yazılımın üst seviyedeki fiziksel parçaları olup katmanlar halinde oluşturulur. Her katmanın bir ara yüzü bulunmaktadır. Sınıf grupları ya da diğer elemanları tek bir ad boşluğu (namespace) altında gruplamak için kullanılır.
3
Gerçekleme ilişkisi: Her bileşenin bir ara yüzü olması gerekmektedir. Tek başına çalışabilen alt modülleri bileşen olarak düşünülürse, bu bileşenler yer değiştirilebilir olmalı ve birini çıkarıp diğerini yerleştirmek, sistem üzerinde fazla değişikliğe yol açmamalıdır. Bu amaçla; bileşenlerin ara yüzlerinin gerçekleniyor olması yeterlidir. Bileşenler sayesinde, sistem daha esnek bir yapıya kavuşurken bakım yapılabilirliği de artmaktadır. Aynı arayüzü sağlayan başka bir bileşeni sisteme entegre ettiğiniz durumda sistem, mevcut yapıda herhangi bir değişiklik olmadan çalışmaya devam edecektir. Gerçekleme ilişkisi “lolipop” sembolü ile gösterilir.
2
(Class/Interface/Object(Sınıf/Arayüz/Nesne): Component diyagramlarında object ve class diyagramlarında kullanılan elemanlarda kullanılmaktadır.
4
RelationAssociation(İlişki): Class diyagramlarındaki kullanım ile aynıdır.
10





Component Diyagram Örnekleri :

2
5

Component diyagramlar ve deployment diyagramlar arasında sıkı bağ bulunmaktadır. Deployment diyagramlar sistemin donanım ve yazılım ilişkilerinin fiziksel gösterimidir.

Deployment diyagramlar bağlantılar ve nodelardan oluşur. Node sistemin donanım parçasını ifade eder. Sistem mühendisleri ve network mühendisleri tarafından geliştirilir. Sistemin donanım topolojisini gösterir. Mimari spesifikasyonun bir parçası olarak yapılandırılır. Amaç;
  • Bileşenlerin dağılımını göstermek
  • Performans engellerini teşhis etmek
Deployment Diyagram Örnekleri:
2
Referanslar
Neslihan ÇALIŞKANEL

20 Nisan 2010 Salı

Univera bir Dünya şirketi olabilir mi?

Merhabalar... Yazılım Grup Müdürümüz Deniz Kılınç’ın önderliğinde kurulan bu Blog’da 100. yazıyı yazma onurunu bana verdiler... Öncelikle bu jest leri için başta Deniz beye e ve tüm Univera Yazılım grubuna teşekkür edeiyorum ..
Ben bu 100. yazı için kendime bir başlık düşündüm ve aklıma “Univera bir Dünya şirketi olabilir mi?” başlığı geldi... (Dervişin Fikri neyse Zikri de oymuş hesabı :) herhalde)
Evet bu yıl bizim 18. yılımız... Üniversiteden sınıf arkadaşım Selahattin Tosuner ile birlikte bir iş hanının 20 m2 lik odasında 4 kişilik dev :) bir kadroyla 15 Eylül 1992’de kurduğumuz şirketimiz bugün 100 kişilik bir bilişim şirketi oldu... İlk kurulduğumuz yıla göre; bugün eleman sayımız 25 kat, ciromuz 60 kat artmış durumda... Bize direkt bağlı çalışan 13-14 şirkete sağladığımız aylık düzenli gelirleri de hesap edersek; belki bu gün Univera her ay 500-600 kişinin rıskını sağlıyor, ekmeğini çıkarıyor...
Bu hiç sermayesi olmadan , sırf idealleri ile, kendi işini kuran iki mühendis için zaten muhteşem bir başarı... Biz şirketimizle her zaman gurur duyduk ve duymaya da gelecekte devam edeceğiz...
Ancaaaakkk. :)...
İşte sorulması gereken en önemli soru şu : ... Acaba şu anki durumumuz üzerineden yıllarca basit gelirler sağlayacak şekilde bu rahat işi devam mı ettirsek ? ; Yoksa elimizdekiyle yetinmeden; yeni fırsatların başlangıcı olabilecek veya yeni maceraların zorlanabileceği yeni açılımlar peşinde mi koşmalıyız?
İşte biz bu yeni açılımlar kapısının varlığına inanıyoruz ve bu 18 yılda elde ettiğimiz değerleri çevre ülkelere de yayabileceğimizi görüyoruz... Ve çalışanlarımızın da bu elde ettiğimiz bilgi birikimimizi ve varlıklarımızı (yazılımlarımız-teknolojimiz) YURT DIŞINA taşıma misyonuna sahip çıkmalarını bekliyoruz...

Univera bugün aralarında Nestle-Kraft-Efes Pilsen-Caddburry-JTI-Danone-PO-Garanti Bankası vs.. gibi bir çok dünya devinin de içinde olduğu 70 den fazla sanayi ve hizmet şirketine projeler sağlıyor... Bugüne kadar 18 ülkeye ihracat yaptık... Ama bunlar genellikle “one shot” yani bir defalık projelerdi... Biz artık Rusya’da ; Türki Cumhuriyetlerde, Balkanlarda; Orta Doğuda ve Kuzey Afrika Ülkelerinde sürekli var olmak ve kalıcı olmak istiyoruz... Öncelikli hedef ülkelerimiz bunlar...
Dikkat ederseniz hedef pazarları sayarken AB ülkelerini saymadım... Bugüne kadar Avrupada birkaç büyük ihaleye girdik... Bunların çoğunda sunduğumuz ürünler yabancı rakiplerimize göre kat kat daha başarılı olmasına rağmen “Kafadaki Yanlış Türk Algısı” nedeniyle bu projeleri kaybettik... Ama yukarıda saydığım ülkelerde bu tip ön yargılar yok... İnşallah işe buralardan başlayacağız, yayılacağız, uluslararası olmayı öğreneceğiz ve Bir gün Avrupalı dostlarımıza da “Merhaba, biz Geldik” diyeceğiz.. :) Muhteşem Türkler olarak
Bu Blog u genellikle genç arkadaşlarımız okuyor... Univera’lılar, iş ortaklarımız, meslektaşlarımız, öğrenciler veya Univera’ya bir şekilde ilgi duyanlar... Lütfen şuna emin olun... Biz daha yolun başındayız... İçimizde büyük idealler var... Aklımızda büyük fikirler, büyük projeler var... Tedarik Zinciri Otomasyonu ve Mobil İş Uygulamaları konusunda Dünyadaki en iyi yazılımlardan birini yazdığımızı iddia ediyoruz... Üstelik bu kanıya da kendi kendimize varmadık... (Yani kendi kendimize gelin-güvey de olmuyoruz :) ) Bunu bize deklere eden, bildiren ve bizi onore eden birçok ciddi uluslararası müşterimiz ve bir kaç uluslararası ödülümüz de var.... (En son Intermec Corp. firmasının 54 ülkeden, 950 den fazla iş ortağı içinde bizi EMEA bölgesinde “The Technology Innovator of the Year” seçmesi mesela)
Ve en önemlisi kendimizi sanki ilk günkü gibi enerjik ve dinç hissediyoruz... Ülkemizden bir teknoloji şirketinin bir dünya teknoloji şirketi olabileceğini kanıtlayabiliriz... Elimizde bu fırsat var...Üstelik bu alt yapıyı da kendimiz oluşturduk.
O nedenle diyorum ki arkadaşlar; gelin hep birlikte bu büyük fırsatı kulllanalım...
Kalın sağlıcakla…
Cüneyt ERSİN

19 Nisan 2010 Pazartesi

UML ve Modelleme – Bölüm 9(Activity Diyagramlar)

Önceki makalemizde işbirliği diyagramları olarak adlandırılan collaboration diyagramlarından bahsetmiştik. Bu makalemizde UML modellemede kullanılan en önemli diyagram türlerinden biri olan Activity diyagramlarını inceleyeceğiz.
Activite diyagramları sistemin dinamik görünümünün modellendiği diyagramlardır. Bir aktiviteden diğer aktiviteye geçerken temelde işlem akışı(flowcart) diyagramlarına benzerler. Aktivite sistemin işleyişini açıklamaktadır. İşlemler arasındaki akış; ardışık, dallanma ya da eş zamanlı olabilir. Activity diyagramları tüm kontrol akışını ele almaktadır(Örn: kollara ayrılmak, birleşmek ...).
Activity diyagramlarından önce incelediğimiz diyagramlarda akış nesneler arasındaki modellemelerde kullanılırken activity diyagramlarında akış bir aktiviteden diğer bir aktiviteye geçişleri modellemede kullanılır.
Aktivite sistem işleyişinin bir parçasıdır. Activity diyagramları sistemin sadece dinamik yapısını göstermek için kullanılmaz, çalıştırılabilir sistemin düzenlenmesinde de kullanılabilmektedir. Activity diyagramlarında eksik olan kısım diğer diyagramlara göre mesajlaşmadır. Bir aktiviteden diğer aktivite akışında herhangi mesaj gösterilmez.

Tüm bu anlattıklarımızdan sonra bu diyagramın amacını aşağıdaki şekilde özetleyebiliriz:
  1. Sistemin aktivite akışını modellemekte kullanılır.
  2. Bir aktiviteden diğer aktiviteye sıralamayı tanımlar.
  3. Sistemde paralel, dallanma ve eşzamanlı akışı tanımlar.
Activity Diyagram Modellemesinde Kullanılan Elemanlar
İlk Aktivite (İnitial Activity): İşlem akışının ilk aktivitesi ya da başlangıç noktası diyebilir. State (Durum) diyagramlarındaki ilk durum ile aynı gösterime sahiptir. image 
Aktivite(Activity): Sistem işleyişinin bir parçası olduğunu belirtmiştik. Aşağıdaki şekil ile gösterilir. image
Karar Noktası(Decision) : Akış diyagramlarındaki karar mantığına benzerler. Akış şemalarındaki karar çiziminden farkı; Activity diyagramda baklava şekli içerisine herhangi bir açıklama yazılmaz. Karar noktasına göre baklavanın sağ ve sol taraflarında köşeli parantezler içerisinde açıklamalar yazılır. image
Sinyal(Signal): Aktivite mesaj gönderiminde yada mesaj alma işlemi sinyal olarak adlandırılır. Modellemede iki çeşit sinyal tipi bulunmaktadır.
Giriş Sinyali(Input Signal): Mesajın aktivite alması
Çıkış Sinyali(Output Signal): Mesajın aktivite göndermesi.
image
Eş Zamanlı Aktiviteler(Concurrent Activities): Bazı aktiviteler eş zamanlı yada paralel oluşurlar. Örneğin bir derste eğitmeni dinlerken aynı zamanda tahtadan yazılanlarıda okumak gerekir. image
Son Aktivite(Final Activity): Aktivite diyagramlarının son elemanıdır. Aktivitenin bitiğini belirtir. image





Örnek Activity Diyagram
image
Bir sonraki makalemizde fiziksel diyagramlara giriş yapıp Component (Bileşen) Diyagramlarını ayrıntılı inceleyeceğiz.
Referanslar
Neslihan ÇALIŞKANEL

18 Nisan 2010 Pazar

Bilişim Tatili 2010

Bilişim sektöründeki kaliteli insan kaynağı eksiğini bir nebze olsun azaltmak için güzel bir etkinlik ile karşı karşıyayız. Bu sefer fikir  farklı, organizasyon Dev Ajans tarafından yapılmış. Slogan “Hiçbir eğitim bu kadar tatil olmamıştı”. 1000 kişinin katılımının hedeflendiği etkinlikte bilişim alanlarında öğrenci, öğretim görevlisi  ve bilişime ilgi duyan gençlerin sektörün temsilci ve yöneticileri ile tanışmak, kariyer veya staj fırsatı yakalamak, sektördeki gelişmeleri ve yeni nesil teknolojileri detaylı olarak anlayabilmeleri için lansmanlar ve söyleşiler düzenlenecek. Biz de Univera ailesi olarak bu etkinliği sonuna kadar destekliyoruz.
Etkinlik Yeri: Çeşme Altınyunus Otel
Etkinlik Tarih: 07 – 09 Mayıs 2010

afis
07 Mayıs Cuma
  • 13:00 -Giriş /Kayıt ve Serbest zaman
  • 16:30 – 17:00 Hoşgeldin Kokteyli
  • 17:00-19:00 Devletşah Özcan – Ebru Baranseli (Sosyal Medya ve Türkiye / İnternet Özgürlüğü ve Türkiye)
  • 19:30 Aksam Yemegi ve Efes Pilsen Beach Party
8 Mayıs Cumartesi
  • 11:00-12:30 Ömer Ekinci (Penguen Olma Girişimci Ol!)
  • 12:30-13:30 Öğle Yemeği
  • 13:30-15:00 Daron Yöndem (Türk Yazılım Sektörü ve Kariyer)
  • 15:00-15:15 Kahve Molası
  • 15:15-16:45 Aret Vartanyan (Dijital Marka Yönetimi)
  • 16:45-17:00 Kahve Molası
  • 17:00-18:30 Barış Özcan (Dijital Yayıncılık ve Kariyer)
  • 19:30- Akşam Yemeği ve Efes Pilsen Beach Party
09 Mayıs Pazar
  • 11:00-12:30 Okan Yıldırım (Türk Oyun Sektöründe Kariyer / Online Oyunlar)
  • 12:30-13:00 Kapanış Konuşması
Deniz KILINÇ

16 Nisan 2010 Cuma

Univera Mobil Teknolojiler Günü Etkinliği – 15 Nisan 2010

Yılda 2 kez İzmir ve İstanbul’da düzenlediğimiz, Univera Mobil Teknolojiler Günü etkinliğimizin sonuncusunu 15 Nisan 2010 tarihinde İstanbul Marriott otelde gerçekleştirdik. Univera çalışanları ile beraber yaklaşık 200 kişi katılımda bulundu. Etkinliğin en vurucu tarafı Univera olarak yol arkadaşlığı yaptığımız Müşterilerimizin de projeleri ile ilgili sunum yapmalarıydı. Univera Yazılım teknolojileri, vizyonu ve İş Zekâsı üzerine ben de bir sunum yaptım. Tüm organizasyon dört dörtlüktü.
event_logo
Kısa notlar;
  • Univera ailesinde çalışmaktan bir kez daha gurur duydum. Ne kadar büyük olduğumuzu tekrar gördüm. Oldukça motive ediciydi.
  • Kurumsallaşmanın ve kalite odaklılığın etkisini her yerde hissettim (Geçen seneye göre çok daha fazla…). Bu ceket, bize tam olmaya başladı. Tüm süreç iyileştirmelerine, yatırımlara, karlılık çalışmalarına, kalite odaklı çalışmaya devam…
  • Müşteri hizmetleri, yazılım, test ve proje yönetimi olarak yapacak çok işimiz var :) (Challenge iyidir)
  • İş Zekâsı süreci hem müşterilerimizi hem de bizi çok geliştirecek.
  • Benimle birlikte yazılımdan 4 kişi katıldık. Müşteriye az dokunan diğer birimlerin katılımlarının yüksek olmasının, şirket kültürünü ve bilincini daha çok arttıracağı düşüncesindeyim. Önümüzdeki senelerde daha fazla katılımı nasıl sağlarız, organizasyonda bu durumu daha etkin hale nasıl getiririz düşünmemiz lazım.
  • Birebir iletişimin etkisini yine gördüm.
  • Müşteri odaklılık ve ürün odaklılık arasındaki dengenin korunmasının şart olduğunu günden güne daha iyi anlıyorum. İleride bu konularda daha kapsamlı makaleler yazacağım. Herkesin zannettiği gibi siyah ve beyaz olan bir durum yok, aksine kendimize has bir win-win modelimiz var, geliştirmemiz lazım… (Univera KHOÇ - Kalite ve Hedef Odaklı Çalışma)
  • Hüseyin Baki ŞİRİN gibi sektör gurularının katılımları çok etkili oluyor.
  • Teknik sunumu basite indirgemenin ve senaryo üzerine yapılan sunumların avantajlarını gördüm.
  • Hepimizin ruhunda biraz satışçılık olmalı, ben şahsen bayılıyorum :)
  • Toplu uçak geliş-gidişlerinde hepimiz son Polonya etkisini az çok hissettik.
  • Geçen sene yapacağız dediğimiz işlerin %80’inden fazlasını yapmış olmak güzeldi.
Etkinlikten bazı kareler;
DSCF0472
DSCF0916
Teşekkür;
Başta Kurumsal İletişim Yöneticimiz sevgili Didem KOCAŞ ve İstanbul Bölge Müdürümüz İhsan TUTKAN olmak üzere emeği geçen herkesin, eline, ayağına, aklına, emeğine sağlık.
Son Söz;
Univera ile “Bilginin Gücü Elinizde”
Deniz KILINÇ

12 Nisan 2010 Pazartesi

UML ve Modelleme – Bölüm 8(Collaboration Diyagramlar)

UML ve Modelleme-Bölüm7 makalemizde etkileşim diyagramlarından ilki sequence diyagramlarını incelemiştik. Bu makalemizde etkileşim diyagramlarından ikincisi olan işbirliği diyagramları olarak adlandırılan collaboration diyagramları inceleyeceğiz.
Nesneler arasındaki mesajlaşmaların numaralandırılmış akış sırası ile ifade eden diyagramlar Collaboration diyagram olarak adlandırılır. Bu diyagramlar sequence diyagramlar ile aynı bilgileri taşırlar fakat sequence diyagramlara göre nesneler arasındaki modelleme farklıdır.
Collaboration diyagramlarında nesnelerin iki farklı karakteri olduğundan sözedilir, şayet bir nesne (örneğin A) diğer bir nesnenin (B’nin) fonksiyonunu çağırıyorsa; A istemci (client) B ise tedarikçi (supplier) terimleri ile bu nesneler adlandırılır. A ---> B. Collaboration diyagramlarında kullanılan elemanlar aşağıdaki gibidir;
image
Modellemede nesnelerin isimlendirilmesi ve tip belirtimi aşağıda belirtilmiştir.
image
Mesaj : Sequence diyagramlardaki mesaj tipleri collaboration diyagramlardada geçerlidir.
Mesaj tipleri ve gösterimleri
Basit (Simple) Mesaj Tipi: Basit mesajlar nesneler arasındaki akış kontrolünün iletimini göstermek için kullanılır. Nesnelerin methodlarını doğrudan çağıramazlar.Sık kullanılar mesaj tipi değildir.
Senkron (Syncronous) / Çağrı yapan(Call) Mesaj Tipi: Nesne mesajı alıcı nesneye gönderir ve onun işlemini bitirmesini bekler, bu durumda senkron mesaj tipi kullanılır. Nesne tabanlı programlamada çağırılan birçok method senkron çalıştığından en çok kullanılan mesaj tipidir.

Asenkron Mesaj Tipi: Senkron mesajların tersine, asenkron mesajlar nesneye mesaj gönderdikten sonra cevap beklemeden işleme devam etmesinin gösteriminde kullanılır. Genellikle komut zincirlerinde kullanılır.
Dönüş (Return) Mesaj Tipi: Senkron mesajlarda alıcı nesnenin işleminin bitimini, gönderen nesneye bildirmesinde kullanılır.
image
Sequence diyagramlar ile Collaboration diyagramlar arasındaki farklar

Sequence Diyagramlar Collaboration Diyagramlar
Zamana bağlı mesajlaşmayı gösterir Zamandan bağımsızdır.
Dinamik yapıyı temsil eder. Dinamik yapıyı ve nesnelerin statik ilişkisini temsil eder.
Okuması kolaydır. Daha karmaşık sistemlerin modellemesi için kullanılır. Okunması sequence diyagramlara göre daha zordur. .
Senaryoya ait tüm resmi net olarak göstermeyebilir. Senaryoya ait tüm resmin net olarak gösterilmesini sağlar
Bir bağlantı, bir nesneden diğerine giden mesajı gösterir. Bir bağlantı nesneler arasındaki 1 veya daha fazla mesajı gösterebilir.
Nesnelerin yaratılışı ve sonlandırılışını kolay şekilde gösterebilmenize imkan vermesidir. Zaman boyutunda "yeni ()" mesajı ile nesneyi yaratabilir, X işareti ile de nesnenin sonlandırıldığını gösterebilirsiniz. Nesnelerin yaratılışı ve sonlandırılışını belirtmek sequence diyagramlardaki kadar basit değildir.
Bu durumu gerçekleştirmek için "oluştur( )" ve "sonlandır( )" mesajlarını modele katmanız gerekir.
Referanslar
Neslihan ÇALIŞKANEL

5 Nisan 2010 Pazartesi

Visual Studio 2008 Test Edition Web ve Load Test İncelemesi (Bölüm 7) – Load Test

Bir önceki makalemizde Web Testi ile test senaryosunu oluşturmuş ve yük testi için hazır hale gelmiştik. Load Test/Yük testi, uygulamanın farklı senaryolarda sergileyeceği performansın ölçülmesini sağlayan bir test yöntemidir. Çoğu zaman, eğer uygulamamız tek bir makinede çalışıyorsa, performansı hakkında bir fikir sahibi olabiliriz. Fakat web uygulaması gibi performansın etkilenebileceği pek çok faktörün bir araya geldiği durumlarda, uygulamamızı ancak yük testinden geçirerek sonuçlarına göre iyileştirmeler yaptıktan sonra daha sağlıklı fikrimiz olur.
Visual Studio içerisinde gelen yük testi, farklı tarayıcılarla, farklı kullanıcı profilleri için hafif ve ağır yük senaryolarını oluşturabilecek pek çok özellik içermektedir. Bunu, yerel makinemizde basitçe uygulayabileceğimiz gibi (gerçekçi sonuçlar vermeyebilir), pek çok farklı makineyi dâhil ederek de (bir “Controller”, bir veya birden fazla “Agent”) uygulayabiliriz.
Yük Testi Oluşturulması
Daha önce oluşturduğumuz test projesi içerisinde, yeni test ekleme ekranını açıp, yük testini seçelim.
image
Yük testinin adını girdikten sonra ekranı kapatalım. Karşımıza, yük testinin en genel özeliklerini ayarlayabileceğimiz bir sihirbaz gelecektir.

image
Sihirbazda açılış ekranı sonrasında, aşağıdaki ekran görüntüsünde olduğu gibi, yük testi adını girebileceğimiz bir giriş kutusu ve altında sanal kullanıcılar için, senaryoların çalıştırılması sırasında kullanılacak bekleme süresi girilebilir. Bu bekleme süresinin, Visual studio tarafından yorumlanıp değişkenlik göstermesini veya devre dışı kalmasını istiyorsak, gösterilen üç profilden uygun olanını seçmemiz gerekir.
image
Bir sonraki adımda ise, yük deseni belirlenir. Burada iki tip yük deseni mevcuttur. İlki “Constant Load” (Sürekli yük) olup, yük testinin başlaması anında, belirlenen sanal kullanıcı sayısı kadar kullanıcı hemen yaratılır ve yartılan her kullanıcı aynı anda yük oluşturmaya başlar.
İkinci seçenek olan “Step Load” test, belirlenen aralıklarla arttırılan sanal kullanıcı sayısına bağlı yük testidir. Burada; “Start User Count” yük testi başlar başlamaz aktif olup yük yaratacak kullanıcı sayısıdır. “Step duration” saniye cinsinden bir değer olup, belirtilen süre kadar sonra, “Step User Count” değerindeki sanal kullanıcı sayısını sisteme yükler. “Maximum user count” ise, en fazla yaratılması gereken kullanıcı sayısını gösterir.
image

Bir sonraki adımda ise, test karışım modeli seçilir. Burada üç seçeneğimiz vardır.
  • “Based on the number of tests“:  Seçilen test senaryoları, “Test Mix” adımında verilen oranlar doğrultusunda paylaştırılarak çalıştırılır.
  • “Percentage Based on Virtual Users”: Sadece “Test Mix” adımında belirtilen oran doğrultusunda çalıştırılmayıp, yük biçimi adımında belirlenen yöntem de kullanılarak, mutlaka verilen süre içerisinde belirlenen sayıda sanal kullanıcı yaratılıp yük oluşturulur.
  • “Based on user pace”: Test karışımında olan her testin her bir kullanıcı tarafından çalıştırılma oranı belirlenir. Örneklemek gerekirse;
    • A testi: Bir sanal kullanıcı bir saatte 4 test
    • B testi: Bir sanal kullanıcı bir saatte 2 test
    • C testi: Bir sanal kullanıcı bir saatte 0.125 test
gibi değerler verilebilir. Dolayısıyla Visual Studio, belirlenen testlerin en fazla ne kadar sürmesi gerektiğini hesaplayıp, bu süre zarfında sonlanmayan testler için hata döndürür.
image
Bir sonraki adımda test karışımının içeriği belirlenir.
image
Açılan ekrandan “Add” tuşuna basıp, test seçim ekranı açılır ve yük testine dâhil olması istenen “webtest” eklenir.
image
Eklenen “webtest” için çalıştırılma dağılımları aşağıdaki ekrandan girilir. Dağılımların toplamı her zaman 100 olmalıdır. Olmadığı durumda bir sonraki adıma geçmenize izin verilmez.
image
Ek olarak bu adımda, açılış ve kapanış için sadece bir kez çalıştırılmak istenen “webtest” girilebilir. Dolayısıyla web uygulamanız, sayfaların çalışabilmesi için mutlaka giriş bilgisine ihtiyaç duyuyorsa (örn: forms authentication), uygulamanızın giriş sayfası için üretilen “webtest” senaryosunu, “initialization test” olarak seçebilirsiniz. Böylece, her sanal kullanıcı önce bu adımdan geçip gerekli oturum bilgilerini oluşturduktan sonra, test senaryolarını çalıştıracaktır.
Bir sonraki adımda, tarayıcı tipi dağılımını belirleyebilirsiniz. Uygulamanızın çalışmasını istediğiniz tarayıcı tip / sürümlerini seçip ekledikten sonra gerçekte kullanımı göz önünde bulundurarak dağılımlarını düzenleyebilirsiniz.
image
Bir sonraki adımda yine benzer şekilde, bağlantı tiplerini seçebilirsiniz. Hizmet vereceğiniz bölgedeki ISP hızlarını dikkate alıp uygun olan bağlantıları eklemeniz, gerçek hayat simülasyonu yapmanız anlamında önemlidir. Buna ek olarak, uygulamanız hem Internet hem de intranet ortamından kullanılacaksa, LAN bağlantısını da ekleyip, intranet kullanıcılarının toplam kullanıcı sayısına oranına göre bu bağlantının dağılımını da belirleyebilirsiniz.
image
Bir sonraki adımda, varsayılan değerlerle kullanılacak sayaçlar ve bu sayaçların hangi makinelerde kullanılacağını belirleyebilirsiniz. Varsayılan değerleri incelediğimizde, “Controller” ve “Agent” servislerinden metriklerin toplanabileceğini görürüz. Bunlara ek olarak, servis kurmadan metrik toplamak istediğimiz sistemlerimiz varsa, bunun için “Add Computer” tuşuna basıp, ilgili makineleri sırasıyla eklememiz gerekir.
image
Not: Servislerin kurulmadığı ve/veya erişim haklarının yönetici seviyesinde olmadığı durumlarda, test sırasında metrikler toplanamayabilir.
Son olarak, yük testi çalışma süresinin neye göre belirlenmesi gerektiğini düzenleyeceğimiz adıma gelmiş oluruz. Bu adımda yük testi süresi iki şekilde planlanabilir.
  1. Çalışma süresi
  2. Iterasyon sayısı
image
Çalışma süresi olarak planlanmak istediğimiz zaman, yük testi bilgilerinin tamamlanabilmesi için en azından, “Run Duration” (çalışma süresi) girişinin yapılması zorunludur. “Warm-up duration” (ısınma süresi), “Constant Load” veya “Step Load” test seçildiğinde başlangıç için belirtilen sanal kullanıcı sayısına ulaşmak için geçmesi gereken süredir. Bu değerler girilmediği durumda (varsayılan sıfırdır), test hemen başlatıldığı gibi eş zamanlı bir şekilde başlangıç kullanıcı sayısı kadar sanal kullanıcı yaratılmaya çalışılır.
Iterasyon sayısı olarak planlamak istediğimiz zaman ise, toplamda çalışmasını istediğimiz test sayısını belirlemiş oluruz. Bu sayı çerçevesinde, gerekli sanal kullanıcı sayısını visual studio kendisi belirler. Çalıştırılan testlerin uzunluğu ve yük deseni için belirlenen parametreler de bu sayının belirlenmesinde rol oynar.
Ali KALFAOĞLU

3 Nisan 2010 Cumartesi

.NET Framework 4.0 ile Genel Yenilikler – Visual Studio 2010 IDE Yenilikler

Bu kısımda Visual Studio 2010 geliştirme ortamı ile gelen ve ortamı kullanmamızı kolaylaştıracak olan özelliklere göz atacağız. Göz atacağımız özellikler şu şekildedir:
  • Data Tips
  • Breakpoint
  • Intellisense
  • Dump File
Data Tips
Bildiğimiz gibi data tipler, debug sırasında fare işaretçisini değişkenlerin üzerine getirdiğimizde değişkenlerin değerlerini gösteren yardımcılardır. Visual Studio 2010 ile birlikte datatiplerle ilgili bir takım yenilikler gelmiştir. Böylece data tipler daha kullanışlı hale gelmiştir. Bu yeni özellikler şu şekildedir.
  • Data tiplerin sabitlenebilmesi: Önceden datatipler sadece üzerine gelindiğinde gözüküyordu. Pin butonu yardımıyla istenilen data tipler değişkenin bulunduğu satıra sabitlenebilmektedir. Debug bittiğinde görünmez hale gelen sabitlenmiş datatipler bir sonraki debugta yeniden çıkmaktadır.
  • Datatiplerin altına VS 2010 ile birlikte yorum da eklenebilir. Şekilde pinlenmiş ve yorum eklenmiş bir datatip görülmektedir.
image
  • Datatipleri yazdığımız yorum ile birlikre kendi makinamızdan başka bir yere de taşıyabilmekteyiz. Ve böylece aynı projede çalışan başka bir arkadaşımızla da datatipleri paylaşabilmekteyiz. Bunun için datatipleri export/import etmemiz gerekir. Data tipleri Debug-> Export Data Tips ile xml bir dosyaya export edebilir Debug-> Import Data Tips ile de VS 2010 içerisine import edebiliriz.
Breakpoints
Breakpointler geliştirme yaparken, hataların bulunabilmesi ve düzeltilebilmesi gibi işlemlerde önem taşımaktadır. Bulduğumuz bir hatanın yerini başka bir arkadaşımıza gösterebilmek için breakpointleri onun makinesine taşıyabilsek güzel olmaz mıydı?. Artık datatipler gibi breakpointler de VS2010 ile birlikte sadece kendi makinemizde kalmaktan çıkıp, export ve import yaparak başka bir makinede da kullanılmaktadır. Ve geliştirme aşamasında bu özellik ile bize yardımcı olmaktadırlar. Debug-> Windows-> Breakpoint penceresindeki export ve import butonlarıyla breakpointleri de xml formatında export edip import edebiliriz. Bunların dışında IntelliTrace penceresi ile programda arka planda yapılan bütün işlemleri de takip edebiliyoruz.
image
Intellisense
Visual Studio’nun Intellisense özelliği en çok kullandığımız özelliklerinden biridir. Bu özellik daha hızlı ve doğru bir şekilde kod yazmamıza yardımcı olmaktadır. Visual Studio 2010 ile birlikte intellisense özelliğine de bir takım yenilikler gelmiştir. Yeni özellikler “like” gibi aramaya ve PascalCase aramaya da izin vermektedir.
Visual Studio’da istediğimiz kodun gelmesi için baştan itibaren doğru bir şekilde yazmamız gerekiyordu. VS 2010 ile birlikte SQL’deki like komutu gibi arama yapılabilmekte ve intellisense bize yardımcı olmaktadır.
image
Bir diğer özelliği ise Pascal-Case aramaya olanak tanımasıdır. Ulaşmak istediğimiz metodun veya tipin adındaki büyük harfleri yazdığımızda karşımıza gelecektir.
image
Dump Files
Kendi kod ortamımızda oluşturamadığımız fakat programımızın çalıştığı başka bir yerde oluşan hataların sebebini bulmak genelde sıkıntılı bir süreçtir. VS 2010 ile birlikte gelen dump file’ları debug edebilme özelliği de gelmiştyir. Task manager’dan hata veren programın exesine create dump file denilip bu dosyanın kaydedildiğini düşünelim.
VS2010’dan bu dump file’ı open file ile açıp debug with mixed mode dediğimizde dump file yüklenerek, programın hata verdiği yer gösterilecektir. Tabi source codeların çalışan program ile aynı olması gerekmektedir.
Özlem KARAGEDİK

.NET Framework 4.0 ile Genel Yenilikler – Visual Basic 10

Bu bölümde VB 10 ile birlikte gelen yeniliklere göz atacağız. Bu kapsamda bahsedeceğimiz konular aşağıdaki gibidir.
  • Auto-Implemented Properties
  • Collection Initializers
  • Implicit Line Continuation
  • Statement Lambdas
Auto-Implemented Properties
Vb 10.0 ile birlikte C# da olduğu gibi property tanımlarını get ve set kullanmadan yazabilme imkanı gelmiştir. VB9 ile tanımlanan bir property’nin VB10 ile get ve set kullanmadan nasıl tanımlanabileceği aşağıda gösterilmiştir.
image
Collection Initializers
List gibi bir koleksiyon yaratmak ve içerisine itemları eklemek için, VB9’da bir liste yaratarak add metodu ile tek tek itemları eklemek durumunda kalıyorduk. Artık bu işlemi aşağıda görüleceği gibi from keyword ile rahatlıkla yapabiliriz.
image
Implicit Line Continuation
Tek bir satırda yazılması gereken bir kodu birden fazla satır halinde yazmak istediğimizde bir alt satıra geçerken “_” kullanılması gerekiyordu. VB10 ile bu zorunluluk ortadan kalkmıştır.
image
Statement Lambdas
Lambdalar Linq ile birlikte hayatımıza girmeye başlamıştı. VB10 ile birlikte gelen güzel özelliklerden biri de, metodların veya fonksiyonların, satır içinde yazılabilmesi olmuştur. Aşağıdaki örnekte de görüleceği gibi, Sub(n) ile başlayan kısım satır içinde kullanılmış bir metoda örnektir. İkinci örnekte de kodun içerisinde bir satır içi fonksiyon tanımlanarak bu fonksiyon daha sonra çağırılmaktadır.
image

Özlem KARAGEDİK

.NET Framework 4.0 ile Genel Yenilikler – C# 4.0

Bu bölümde C# 4.0 ile birlikte gelen yeniliklere göz atacağız. Bu kapsamda bahsedeceğimiz konular aşağıdaki gibidir.
  • Dynamic Typing
  • Generic Variance
  • Named Arguments
  • Optional Parameters
  • COM InterOp Enhancements
Dynamic Typing
C# 4.0 ile birlikte dinamik tipinde nesnelere kullanılarak dinamik olarak programlamaya odaklanılmıştır. Dynamic anahtar kelimesi C# 4.0 ile birlikte gelen bir kelimedir. Bu anahtar kelime, derleyiciye bu değişkeninin tipinin değişebileceğini ve çalışma zamanına kadar bilinemeyeceğini söylemektedir. Yani Dynamic Language Runtime-DLR mekanizması ile nesnelerin tipleri derleme zamanında değil çalışma zamanında belirlenmektedir. Bir nesnenin metodlarına veya propertylerine nasıl erişiyorsak, dynamic keyword ile yaratılan nesnelerin de property ve metodlarına aynı şekilde erişebiliriz. Tipler dinamik olarak yaratıldığı için çağrılan metod veya property ismi doğru yazılmalıdır. Çünkü metodun veya property’nin geçerli olup olmadığı çalışma zamanında belli olmaktadır. Fakat tip dinamik olduğu için kodu yazarken intellisense yardımı kullanılamamaktadır.
image
Optional Parameters
C# 4.0’a kadar C#’da bir metodumuza yeni bir parametre eklemek istediğimizde ve metodlarımızın çağrıldığı yerlerin bundan etkilenmesini istemediğimiz zaman metodlarımızın yeni parametreyle bir overload’unu yazmak durumunda kalıyorduk. Artık c# da da metodlarımıza optional olarak parametre ekleyebiliyoruz. Ve bu optional parametrelere default bir değer veriyoruz. Böylece bu metod çağırıldında eklediğimiz optional parametre kullanılmadan çağrılırsa o parametre metodta belirtilen default değerini alıyor.
image
Named Arguments
Named Arguments özelliği ile metod çağırımda parametre isimlerini yazarak argümanları gönderebiliriz. Böylece parametrelerin artık metodlardaki sırasıyla çağırılma zorunluluğu kalkmış olur. Veya iki tane opsiyonel parametremiz olduğu durumda metod imzasındaki sırasına göre ilkine değer göndermek istemeyip, ikincisine göndereceksek parametre ismini yazarak ikinci opsiyonel parametreyi gönderebiliriz.
image
Generic Variance
Generic Variance kavramından bahsetmeden önce aşağıdaki kavramlara göz gezdirelim.

Covariance:
Covariance (ortak değişken) özelliği bize tanımlanmış olan bir generic parametreden daha alt tipteki sınıfları göndermemize olanak sağlar.
Contravariance: "Contravariance" özelliği ise tanımlanmış bir generic parametreden daha üst tipteki sınıfları göndermemize olanak sağlar.
Invariant: tiplerin kullanıldığı yerlerde, belirtilen tipin birebir aynısının ele alınması gerekmektedir.

C# 4.0’dan önce generic koleksiyonlar invariant idi. C# 4.0 ile birlikte generic koleksiyonların covariant ve contravariant olmasına izin verildi.
C# 4.0 ile beraber güvenli "Co-Contra Variance" özelliği ile "Generic Delegate"(temsilci) ve arayüzler tanımlayabilmek için in ve out anahtar kelimeleri kullanılabilir. out T Covariant tip kullanımını sağlamaktadır.
Örneğin aşağıda verilen ExClass sınıfı T tipinde covariant’tır. Yani bir Foo<string> yaratılırsa, string object’in bir alt sınıfı olduğu, aynı zamanda bunu ExClass<object> olarak da kullanılabilir.
image
C# 4.0 ile birlikte bu örneği Ienumerable interface inde görebiliriz.
image
Bu arayüz covariant olduğu için bir IEnumerable<string> koleksiyonu IEnumerable<object> koleksiyonuna atanabilir. Burada hatırlanması gereken, "Out" ile tanımlanmış bir parametre sadece dönüş tipi olarak kullanılabileceğidir.
image
Out anahtar kelimesi de contravariant tip kullanımını sağlamaktadır. Örnekte görüleceği gibi contravariant tipteki parametreler sadece input pozisyonlarında(arguments) kullanılabilirler.
image
 COM Interop İyileştirmeleri
VS 2010 ile birlikte COM ile birlikte çalışabilirlik iyileştirmelerine de gidildi. Artık COM nesnelerine erişirken ref parametrelerine ref anahtar kelimesinin girilmesi zorunlu değildir. Optional Parameters desteğinin gelmesi ile metodlara bütün parametrelerin gönderilmesi zorunluluğu da ortadan kaldırılmıştır. Tiplerin dinamik olarak tanımlanabilmesi de COM ile çalışırken işimizi kolaylaştırmaktadır.
Özlem KARAGEDİK