Java-da OOP Əsasları
OOP Nədir?
Obyekt Yönümlü Proqramlaşdırma (OOP) proqramı obyektlər kolleksiyası kimi təşkil edən proqramlaşdırma paradiqmasıdır. Java tam OOP dilidir.
Dörd Əsas Prinsip
1. Encapsulation (Enkapsulasiya)
Data və metodların bir class daxilində birləşdirilməsi və gizlədilməsi.
public class Student {
private String name;
private int age;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) {
if (age > 0) this.age = age;
}
}
2. Inheritance (Varislik)
Bir class-ın başqa class-dan xüsusiyyətlər əldə etməsi.
// Parent class
class Animal {
protected String name;
public void eat() {
System.out.println(name + " yemək yeyir");
}
}
// Child class
class Dog extends Animal {
public Dog(String name) {
this.name = name;
}
public void bark() {
System.out.println(name + " hürür");
}
}
3. Polymorphism (Polimorfizm)
Eyni metodun müxtəlif class-larda fərqli davranışlar göstərməsi.
Method Overloading
class Calculator {
public int add(int a, int b) { return a + b; }
public double add(double a, double b) { return a + b; }
public int add(int a, int b, int c) { return a + b + c; }
}
Method Overriding
class Animal {
public void makeSound() {
System.out.println("Heyvan səs çıxarır");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Hav hav!");
}
}
4. Abstraction (Abstraksiya)
Mürəkkəb detalları gizlədərək sadə interfeys təqdim etmə.
Abstract Class
abstract class Shape {
abstract double getArea();
public void printArea() {
System.out.println("Sahə: " + getArea());
}
}
class Circle extends Shape {
private double radius;
public Circle(double radius) { this.radius = radius; }
@Override
double getArea() {
return Math.PI * radius * radius;
}
}
Interface
interface Drawable {
void draw();
default void print() {
System.out.println("Drawing...");
}
}
class Rectangle implements Drawable {
@Override
public void draw() {
System.out.println("Düzbucaqlı çəkilir");
}
}
Class və Object
// Class - şablon
public class Car {
private String brand;
private String model;
public Car(String brand, String model) {
this.brand = brand;
this.model = model;
}
public void start() {
System.out.println(brand + " " + model + " işə düşdü");
}
}
// Object - class-ın nümunəsi
Car car1 = new Car("Toyota", "Camry");
Car car2 = new Car("BMW", "X5");
Constructor
public class Person {
private String name;
private int age;
// Default constructor
public Person() {
this("Naməlum", 0);
}
// Parametric constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
Access Modifiers
public class Example {
public String publicVar; // Hər yerdən əlçatan
protected String protectedVar; // Paket və subclass-dan
String packageVar; // Yalnız paket daxilində
private String privateVar; // Yalnız bu class-da
}
Static Keyword
public class MathUtil {
public static final double PI = 3.14159;
public static int add(int a, int b) {
return a + b;
}
}
// İstifadə
double pi = MathUtil.PI;
int sum = MathUtil.add(5, 3);
Final Keyword
// Final class - miras alına bilməz
final class Constants {
// Final variable - dəyişdirilə bilməz
public static final String APP_NAME = "MyApp";
}
// Final method - override edilə bilməz
class Parent {
final void display() {
System.out.println("Final metod");
}
}
Üstünlükləri
- Kod təkrarının azaldılması - Inheritance
- Modularlıq - Encapsulation
- Genişlənmə imkanı - Polymorphism
- Saxlama asanlığı - Abstraction
- Real dünya modelləşdirməsi - Objects