Java Sınıf ve Nesne Kullanımı – Web Tasarım & Programlama

Programlama ile hatırı sayılır bir süre uğraştıysanız Nesne Yönelimli Programlama kavramını duymuşsunuzdur. Java Nesne Yönelimli Programlamayı temel alan bir dilidir.

Bu yazıda basit bir sıra tabanlı oyun için gerekli sınıfları ve nesneleri oluşturarak Java’da nesne ve sınıf kavramlarını açıklayacağım.

İlk olarak NESNE ve SINIF nedir sorularına cevap verelim.

Java’da Sınıf Nedir?

Sınıf, ortak özelliklere sahip bir nesneler grubudur. Nesnelerin oluşturulduğu bir şablon veya taslaktır. Mantıksal bir varlıktır. Fiziksel değildir.

Java’daki bir sınıf şunları içerebilir:

  • Alanlar
  • Yöntemler
  • İnşaatçılar
  • Bloklar
  • İç içe sınıf ve arabirim

Java’da Nesne Nedir?

Durum ve davranışı olan bir varlık, bir nesne olarak bilinir, örneğin sandalye, bisiklet, keçeli kalem, kalem, masa, araba vb. Fiziksel veya mantıksal (somut ve soyut) olabilir. Maddi olmayan bir nesnenin örneği bankacılık sistemidir.

Bir nesnenin üç özelliği vardır:

  • Alan: bir nesnenin verilerini (değerini) temsil eder.
  • Davranış: Bir nesnenin yatırma, çekme vb. davranışını (işlevselliğini) temsil eder.
  • Kimlik: Bir nesne kimliği tipik olarak benzersiz bir kimlik aracılığıyla uygulanır. Kimliğin değeri harici kullanıcı tarafından görülmez. Ancak, JVM tarafından her bir nesneyi benzersiz bir şekilde tanımlamak için dahili olarak kullanılır.

Şimdi sıra geldi sınıfın nasıl oluşturulacağını göstermeye.

Java’da Sınıf Oluşturma

Java sınıf oluşturmak için class sözcüğünü kullanırız. Aşağıdaki söz dizimi Java’da basit bir şekilde nasıl sınıf oluşturacağınızı gösterir.

Sınıfları kullanarak örnek nesneler oluşturabiliriz. Örnek nesne oluşturmak için new sözcüğünü kullanırız. Şimdi sınıf ve nesne ile ilgili basit bir örnek görelim.

Ogrenci.java (Sınıf)

Öğrenci sınıfından yeni bir öğrenci oluşturmak için de öğrenci test oluşturup bu sınıfı kullanalım.

Yukarıdaki ilk kodda Ogrenci adında bir sınıf oluşturduk. Bu sınıfı kullanarak da ogrenci1 nesnesini ikinci kod parçasında oluşturduk.

Java Sınıf ve Nesne Kullanım Örneği

Şimdi daha kapsamlı bir örnekle makaleyi tamamlayalım. Aşağıdaki gibi bir uygulama yaptığımızı düşünelim.

Problem:

Bir tane karakter ve bu karaktere ait rollere sahip rol sınıflarını oluşturacağız.

Rol sınıfında rolün id ve ad bilgileri olacak.

Karakter sınıfında ise karaterin id, ad, rol, defans, vuruş gücü bilgileri olacak. Karakter oluşturulurken defans 30-100, vuruş gücü ise 5-10 arasında rastgele bir değer alacaktır.

Ayrıca karakter sınıfında rakibe vurması için Vur metodu olacak ve karakterin vuruş gücüne kadar( rastgele) vuruş yapabilecektir. Karakter vurduğunda rakibin defansından vuruş miktarı kadar azalma olacaktır. Karakterin bilgilerini yazdırmak için Yazdir metodu olacak ve alanlarını yazdıracaktır.

Çözüm:

İlk olarak Rol sınıfını id ve ad değerlerine sahip olarak oluşturuyoruz.

Rol.java

Karakter sınıfını ilk olarak varlıkları ile birlikte oluşturuyoruz. (Sınıfın son halini aşağıdaki Karakter.java ile göstereceğim)

Yukarıdaki kodda dikkat edilmesi gereken nokta rol türünün Rol sınıfı olduğudur.

Kurucu Metot

Kurucu metot, bir sınıfın nesnesi oluşturulduğunda çağrılan bir metottur. Kurucu metot, sınıfın nesnesi oluşturulduğunda, nesnenin özelliklerinin ve değerlerinin atanması için kullanılır. Kurucu metot, sınıf adıyla aynı olmalıdır ve sınıfın içinde tanımlanmalıdır.

Şimdi kurucu metot kullanarak alanlara ilk değerlerini verelim. Alanlara ilk değerlerini verme işini yukarıdaki probleme uygun olarak yapıyoruz.

Not: Random sınıfı için import java.util.Random; bilgidirimini sayfanın başına yapmayı unutmayın.

Karakterin özelliklerini yazdırmak için Yazdir metodunu aşağıdaki gibi yazıyoruz.

Karakterin rakibine vurması için Vur metodunu oluşturuyoruz.

Yukarıda rakip karakteri parametre olarak alan Vur metodunu oluşturuduk. Kodda ilk olarak Random sınıfından bir tane vuruş gücüne kadar olan değer elde ediyoruz. Ardından bu değeri rakibin defansından çıkarıyoruz. Ekran kimin ve ne kadar vurduğu bilgileri System.out.println ile çıktıladık. İşe biraz da eğlence katması için if else kullanarak zayıf ve güçlü vurma durumlarına göre uyarı mesajları verdirdik.

Tüm kodları toplarlayacak olursak sınıfımız şöyle olacaktır.

Karakter.java

Oyun sürücü kodlarını yazmadan önce sınıflar ile ilgili kurucu metotlar gibi bazı özel ifadeler daha mevcuttur. Örneğin erişim belirleyiciler;

Java Erişim Belirleyiciler

Sınıf erişim belirleyicileri, bir sınıfın özelliklerine ve metotlarına nasıl erişileceğini belirler. Java’da, üç farklı sınıf erişim belirleyicisi vardır: public, protected ve private.

  • public: Bu erişim belirleyicisi, sınıfın dışından ve içinden de erişilebilir özellikler ve metotlar tanımlar.
  • protected: Bu erişim belirleyicisi, sınıfın içinden ve türetilmiş sınıflardan erişilebilir özellikler ve metotlar tanımlar. Ancak, sınıfın dışından erişilemezler.
  • private: Bu erişim belirleyicisi, sadece sınıfın içinden erişilebilir özellikler ve metotlar tanımlar. Sınıfın dışından ve türetilmiş sınıflardan erişilemezler.

Şimdi kodumuza bu erişim belirleyicilerden bazılarını uygulayalım. Java’da özellikerin ve metotların varsayılan erişim belirleyicisi public’tir.

Vuruş gücü özelliğini kurucu metot içinde oluşturduğum için dışarıdan değiştirilmemesi gerekir. Ancak yukarıdaki yazdığımız kodda dışarıdan değiştirmek mümkündür. Örneğin aşağıdaki görselde örnek bir nesne oluşturduğunuzda ulaşabileceğimiz tüm public varlıklar görünmektedir.

Vuruş gücü özelliğini sınıf dışından erişime kapatalım.

Diğer özellikler varsayılan olarak public kalacaktır.

Hala kodumuzda sorunlar var. Açıklamaya devam edelim. Nesne yönelimli programlama dillerinden özelliklere dışarıdan erişim doğrudan yapılması uygun görülmemektedir. Özellikler public vermek yerine onları private yapıp değerleri getter ve setter metotlarını kullanarak erişim sağlarız.

Java Getter ve Setter Kullanımı

Java’da getter ve setter methodları, nesnenin özelliklerine (property) dışarıdan erişim sağlamak için kullanılır.

Yukarıdaki kodu biraz daha değiştirecek olursak Karakter sınıfındaki değişim ilk aşamada özellikleri private yapmalıyız.

Şimdi dışarıdan ulaşılabilir ve değiştirilebilir metotlarımızı yazmalıyız.

Karater.java sınıfı şu şekilde değişecektir. Unutmayın VurusGucu dışarıdan ulaşımaz durumda olduğu için ona Setter metodu yazmadık.

Yazıya Encapsulation, Inheritance, Polymorphism, Abstraction gibi kavramları ekleyebiliriz ancak yeterince uzatmak da bir süre sonra yormaya başlayacaktır. Bu yüzden konuyu burada kısaltıp kodu çalıştıran sürücü kodlarını yazıyoruz.

Sıra tabanlı oyun kodlarını test emek işin Oyun adında bir sınıf oluşturup main metodunu aşağıdaki gibi düzenliyoruz.

Oyun.java

Çıktı: Sıra tabanlı bir oyun olduğu için karakterler while döngüsü içinde bir birlerine sırayla vurmaktadır. defansı ilk 0 ve altında olan karakter oyunu kaybetmektedir.

Exit mobile version