Java ile Nesne Yönelimli Programlama
Java'da nesne yönelimli programlama (OOP), programları nesnelerin etrafında organize etme yöntemidir. Her nesne, veri alanları (fields) ve bu alanlarda çalışan metodlar (methods) içerir. Java'da sınıflar ve arayüzler kullanarak nesne yönelimli programlama kavramlarına derinlemesine bakalım.
1. Sınıflar ve Nesneler
Java'da sınıflar, nesnelerin blueprint'lerini (taslaklarını) tanımlar. Bir sınıf, veri alanları (fields) ve metotlar (methods) içerir. İşte bir sınıfın nasıl tanımlandığına dair bir örnek:
public class Car {
private String brand;
private int year;
public Car(String brand, int year) {
this.brand = brand;
this.year = year;
}
public void start() {
System.out.println("Araba çalıştı.");
}
public void stop() {
System.out.println("Araba durdu.");
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
}
public class Main {
public static void main(String[] args) {
Car myCar = new Car("Toyota", 2020);
myCar.start();
myCar.stop();
System.out.println("Arabanın markası: " + myCar.getBrand());
}
}
Yukarıdaki örnekte, Car
sınıfı tanımlanmış ve bu sınıftan bir nesne oluşturulmuştur (myCar
). Sınıf, marka ve üretim yılı gibi özelliklere sahiptir ve start()
ve stop()
gibi metotlar aracılığıyla davranışlarını tanımlar.
2. Kalıtım (Inheritance)
Java'da kalıtım, bir sınıfın başka bir sınıftan özelliklerini ve davranışlarını (metotlarını) miras almasıdır. Bu, kodun yeniden kullanılabilirliğini artırır. İşte bir kalıtım örneği:
public class Animal {
void eat() {
System.out.println("Hayvan yemek yiyor.");
}
}
public class Dog extends Animal {
void bark() {
System.out.println("Köpek havlıyor.");
}
}
public class Main {
public static void main(String[] args) {
Dog myDog = new Dog();
myDog.eat();
myDog.bark();
}
}
Dog
sınıfı Animal
sınıfından kalıtım yaparak eat()
metoduyla hayvanın yemek yemesi yeteneğini miras alır ve kendi özelliği olan bark()
metoduyla havlama davranışını tanımlar.
3. Arayüzler (Interfaces)
Java'da bir arayüz, bir sınıfın hangi metotları uygulayacağını belirleyen bir şablondur. Arayüzler, kodun daha esnek olmasını sağlar ve çoklu kalıtımı simüle eder. İşte bir arayüz örneği:
interface Vehicle {
void start();
void stop();
}
public class Car implements Vehicle {
public void start() {
System.out.println("Araba çalıştı.");
}
public void stop() {
System.out.println("Araba durdu.");
}
}
public class Main {
public static void main(String[] args) {
Tabii, devam edelim:
```html
Car myCar = new Car();
myCar.start();
myCar.stop();
}
}
Vehicle
arayüzü, start()
ve stop()
metodlarını tanımlar. Car
sınıfı bu arayüzü uygular ve kendi içinde bu metodları implemente eder. Bu sayede Car
sınıfı araçların nasıl başlatılacağını ve durdurulacağını tanımlar.
4. Polimorfizm ve Soyut Sınıflar
Java'da polimorfizm, bir nesnenin farklı şekillerde davranabilmesidir. Soyut sınıflar ise diğer sınıflar tarafından kalıtılabilen ve abstract metodlar içeren sınıflardır. İşte bir polimorfizm ve soyut sınıf örneği:
abstract class Shape {
abstract void draw();
}
class Circle extends Shape {
void draw() {
System.out.println("Daire çizildi.");
}
}
class Rectangle extends Shape {
void draw() {
System.out.println("Dikdörtgen çizildi.");
}
}
public class Main {
public static void main(String[] args) {
Shape shape1 = new Circle();
Shape shape2 = new Rectangle();
shape1.draw();
shape2.draw();
}
}
Shape
soyut sınıfı, draw()
adında bir soyut metot içerir. Circle
ve Rectangle
sınıfları bu metodu uygular ve kendi çizim davranışlarını tanımlarlar. Ana programda Shape
tipinde değişkenler kullanarak polimorfizmi gözlemleyebiliriz.
5. Kapsülleme (Encapsulation)
Java'da kapsülleme, sınıf içinde veri alanlarını gizlemek ve erişim kontrolünü sağlamaktır. Bu, kodun daha güvenli ve düzenli olmasını sağlar. İşte bir kapsülleme örneği:
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 30);
System.out.println("İsim: " + person.getName() + ", Yaş: " + person.getAge());
person.setName("Jane");
person.setAge(25);
System.out.println("İsim: " + person.getName() + ", Yaş: " + person.getAge());
}
}
Person
sınıfı, name
ve age
gibi özellikleri private olarak tanımlar ve bu özelliklere erişimi getName()
, setName()
, getAge()
ve setAge()
gibi metodlar aracılığıyla sağlar. Bu sayede veri güvenliği ve doğruluğu sağlanmış olur.