Inheritance ve Polymorphism

Polymorphism ve Inheritance beraber kullanılan iki önemli nesneye dayalı(Object-Oriented) programlama unsurudur. Bunlar program kodlarının yeniden kullanılabilmesi veya var olan kodun geliştirilebilmesi açısından çok önemlidir. Günümüzde yaygın olarak kullanılan diller de nesneye dayalı programlamaya elverişlidir. Bunlara örnek verecek olursak JAVA ve C++ başta gelen nesneye dayalı programlama dilleri olarak gösterilebilir. Inheritance ve Polymorphism i ayrı ayrı aşağıda tartışalım.

Inheritance adında da anlaşılacağı gibi kalıtım anlamına geliyor. Tabi bunun programlama dillerinde anladığımız şekli farklı. Bunu bir örnekle açıklamak istiyorum. Mesela, bir okulda bilgisayar sistemi olsun ve bu sistemin değişik kullanıcıları olsun. Bunlar lisans öğrencileri, akademisyenler,yüksek lisans öğrencileri, asistanlar ve benzeri kişiler olduğunu varsayalım. Şimdi bu insanların hepsi sistemin kullanıcısı. Biz buna karşılık olarak User(Kullanıcı) adında bir sınıf(class) yaratalım. Şimdi bu sınıf bizim ata sınıfımız olacaktır. Bununda türevlerini şu şekilde oluşturabiliriz. Mezun olmamış öğrenciler ve yüksek lisans öğrencilerini bir sınıfa toplayacak olursak bunlara genel olarak öğrenci(Student) diyebiliriz. Çünkü ortak olarak öğrenci paydasında buluşuyorlar. Öğrencileri de yüksek lisans(Master) ve lisans öğrencisi(Undergraduate) olarak ayrı iki sınıfta toplayalım. Akademisyenler(Professor) de sistemin kullanıcısı olduğunu düşünürsek onlarında atası yine User sınıfı olacaktır. Aşağıda buna ilişkin uml şeması bulunmaktadır.

inheritance

Polymorphism aslında Inheritance bağlı bir nesneye bağlı programlama unsurudur. Polymorphism ‘in programlamadaki manasına geçmeden önce, kelime anlamına bir bakmak programlamadaki anlamını daha kolay kavramamıza yardımcı olacaktır. Poly birden fazla manasına gelmektedir. Morph ise şekil veya görüntü anlamına gelmektedir. İkisini bir araya getirirsek birden fazla görüntüsü olan olarak ifade edebiliriz. Anlamını öğrendikten sonra programlamada nasıl kullanıldığını ve ne anlama geldiğine bakalım. Yine bunu da bir örnek ile açıklayalım. Mesela hayvan(Animal) adlı bir sınıf oluşturalım ve bunun çocukları olan Kedi (Cat) ve Köpek(Dog) adında iki tane sınıf tanımlayalım. Şimdi bu iki sınıfta da birer talk() metodu olsa ve kedi ve köpeğin çıkardığı sesleri döndürürse polymorphism’i sağlamış oluruz. Bu şu demek hayvan sınıfında olan talk() metodunu her iki sınıfta method overriding yapıyor. Bu şekilde kedi ve köpek sınıfı birbirinden farklı özelliklerde talk() metoduna sahip oluyor. Bu sadece metodlarda değil aynı zamanda Constructorlarda da geçerlidir. Aşağıda konuyla ilgili kod örnekleri vardır.

abstract public class Animal{
	//Her iki hayvan objesinde olan talk metodu.
	//Abstract sınıflarda metodu tanımlamak zorunda değiliz
	//ancak eğer metodu aşağıdaki şekilde yazarsak
	//java derleyicileri bu sınıfın çocuklarında metod yazılmassa
	//hata verecektir.
	public abstract String talk();
}
public class Cat extends Animal{
	//Kedi sınıfı kediye has olan miyavlama
	//sesini döndürüyor bu şekilde farklı
	//bir görünüme sahip oluyor.
	public String talk(){
		return "Miyav";
	}
}
public class Dog extends Animal{
	//Kedi sınıfı köpeğe has olan havlama
	//sesini döndürüyor bu şekilde farklı
	//bir görünüme sahip oluyor.
	public String talk(){
		return "Hav hav";
	}
}

Yazımın sonuna doğru Abstract sınıfları ve Interface leri anlatacağım. Abstract sınıf ve Interface ler genel olarak aynı işe yarar. Ama yerine göre birbirine göre daha uygun olabilirler. Bunlar aynı proje üzerinde çalışan farklı yazılımcı gruplarının birbirlerinin metotlarını görebilmeleri için aracılık eden veya sağlayan yazılım unsurlarıdır.

Inheritance ve Polymorphism nesneye dayalı yazılımın temel taşlarından bir kaçıdır. Bu tür yazılımlarda geliştiricinin kodları anlaması ve yeniden kullanabilmesi için bu tür özelliklere sahip olması gerekmektedir. Ayrıca çok büyük yazılım projelerinde -bir bilgisayar oyunu gibi- projeyi parçalara ayırmanız gerekir ve bu durumda polymorphism ve inheritance kompleksliğin düşmesi açısından yani parçalanma bakımından önemli bir yer tutar. Kısacası Polymorphism ve Inheritance geliştiricinin ileride daha rahat kullanabileceği bir yazılım ortamı sağlar.

Modern Warfare 2

modern-warfare-2

Medal Of Honor ve Allied Assult gibi güzel oyunların altında imzası olan Infinity Ward yeni oyunu modern warfare 2 ile Call of Duty serisinin en son oyunu olarak oyun piyasasını alt üst etti. Özellikle modern warfare alan oyun severler, oyunun ikincisini de almaktan çekinmediler. Bizim de hoşumuza giden bir oyun olduğu için sizinle oyun detaylarına kısa kısa bakalım. Öncelikle oyunun senaryosuna değinmek istiyorum. Aslında oyunların senaryolarına pek takılmama rağmen bu sefer cidden etkilendim. Ummadık anlarda oyunun içine giren karakterler ve oyunun amacı insanı cidden kendine bağlıyor.

Oyunun grafiklerinde modern warfare’a göre çok bir fark yok ama renklerde ciddi anlamda gelişme sağlamışlar. Ayrıca silahlar nerdeyse gerçeğiyle aynı. Oyundaki karakter detaylarıda ilgi çekici.Bu gelişmelere rağmen oyun çok iyi performans sergiliyor. Mesela 1.83 ghz işlemcili ve geforce 7600 ekran kartı olan bir bilgisayar çok iyi olmasada oyunu idare edecek kadar oynatabiliyordu. Bu da ne kadar ince işçilik yapıldığının bir göstergesi.

Oyunun zorluk derecesi ise hard da çok fazla olmasa da veteran’da cidden saç baş yoldurduğu söyleyebilirim. Ben oyunun campaigni ve solo play bölümünü veteran’ da bitirdim. Uğraşılırsa bitirmemeniz için bir neden yok. Ama oyunun yapay zekası cidden acayip iyi. Öyle ki sizinle çatışırken yer değiştirip sizi arkanızdan vurabiliyorlar. Yada taciz ateşleriyle sizin çıkmanızı sağlamaya çalışıyorlar.

Oyunda eksiklik olarak görebileceğim birkaç nokta var. Bunların başında köpeklere karşı cidden çaresiz olunulması çok büyük sıkıntı yaşatıyor oynayıcıya. Köpeği öldürmek için verilen zaman cidden az. En iyi yol zaten köpekleri silahla öldürmek.

Oyunla ilgili kısa bir not, oyun rusyada toplatıldı. Çünkü Rusların kendi vatandaşlarını öldürdüğü sahne sakıncalı gelmiş. Bunun üzerine oyunun o kısmı atılmış.

Kısaca cidden son zamanlarda oynadığım en iyi FPS(First Person Shooter Video Game). Oyun cidden satılmayı hakediyo. Zaten ilk gün 4 milyon civarında sattı. Alan arkadaşlarım ve ben gayet memnunuz. Herkese tavsiye ederim.

Linux mu Windows mu?

linux-windows

Aslında bayağıdır yazmıyordum sitede ama bir arkadaşın sorusu üzerine birkaç satır bir şeyler karalayayım dedim. Arkadaş bize Linux tabanlı işletim sistemlerinin avantaj ve dezavantajlarını sordu. Biz de aşağıda elimizden geldiğince konuyu ortaya koyacağız.

Linux tabanlı işletim sistemlerinin en büyük artısı bedava olması. Kimseye para vermiyorsunuz. Şimdi akla gelen ilk şey biz zaten para vermiyoruz işletim sistemine. Peki, yeni bir diz üstü bilgisayar aldığınızda gelen Windows işletim sistemleri sizce bedava mı? Tabii ki değil… Bunun haricindeki özelliklere aşağıda bakalım.

Teknik Detaylar: Windows serilerini temel alarak aşağıdaki yorumları yaptım.

Benim Linux tabanlı işletim sistemlerinde ilk dikkatimi çeken özellik fazla işlemci kullanımı ama buna karşılık gayet cüzi miktarda ram kullanımı. Buna şöyle bir örnek verebilirim. Mesela bilgisayarda hiçbir şey yapmazken Windows 2gb rami olan bir bilgisayarda Windows 400 mb civarında ram kullanırken, Linux tabanlı Ubuntu yaklaşık olarak 250 mb civarında ram kullanıyor. Öbür taraftan Windows neredeyse hiç işlemci kullanmazken, Ubuntu yaklaşık olarak %3-4 civarında işlemci kullanıyor.

Windows kullanıcısı için program sorunu yoktur çünkü ihtiyaç olan her türlü uygulama zaten Windows tabanında üretilmiştir ama Linux temelli işletim sistemlerinde durum çok farklıdır. Sadece istediğiniz yazı yazmak olsa bile Microsoft Office gibi bir editörünüz yoktur mesela. Yada photoshop, Messenger ve benzeri programlar da çalışmaz. Onların yerine özgür yazılımcılar tarafından geliştirilen bence onların yerini tutamayacak programlar vardır. En büyük sıkıntılardan biride oyun çalışmaması : D Özellikle oyun tutkunları için korkulu rüya olabilir bu özellik : D

Görsel Detaylar: Windows ve Ubuntu karşılaştırılmıştır

Windows ne yenilik getirdiyse de Ubuntu da ki görselliğe yaklaşamamıştır bence. Farklı masa üstleri ve bunlar arasında şık geçişler cidden insanı Ubuntu kullanmaya itiyor. Bunlarla da kalmıyor tabii. Her bir pencerenin canlı bir varlık gibi davranması ve bunun gibi detayların kişiselleştirilebilir olması kullanıcı için çok büyük bir olay. İşletim sisteminizin sizi yönlendirmesi yerine siz onu yönlendiriyor oluyorsunuz bir noktada. Bunun yanında Linux işletetim sistemlerininde her şeyi işletim sisteminin kendi yapmıyor. Bunun yüzünden kod yazmak zorunda kalabilirsiniz. Bu bilgisayar temeli (bilgisayar mühendisliği, programlama veya buna yakın dallarda bilgi sahibi olmayan)olmayan insanlar için yani genel kullanıcı için çok büyük bir dezavantaj.

Daha bir sürü detaya değinilebilir aslında ama ben bu kadarla sınırladım kendimi. Ben özgür yazılımı sevdiğimden zaman zaman Ubuntu, Fedora gibi işletim sistemlerini kullandım. İkisinden de cidden memnun kaldım. Ama bu sistemleri kullanırken başınıza her şey gelebiliyor. Bunları da düzeltmek için ciddi olarak bu işletim sistemlerinden anlamanız gerekebilir. Uzun sözün kısası Linux tabanlı işletim sistemleri güzel olabilir performansı iyi olabilir ama halen genel kullanıcıya hitap edebilecek özelliklere sahip değil.

 Sayfa: 3 | Toplam: 11 « 1  2  3  4  5 » ...  Last »