Φόρουμ Εκμάθησης Λογισμικού

Εκμάθηση λογισμικού => Python => νμα ξεκίνησε π: Erdeh στις Μαρ 14, 2026, 10:10

Τίτλ: Προγραμματισμός Προσανατολισμένος σε Αντικείμενα στην Python (OOP)
Αποσλή από: Erdeh στις Μαρ 14, 2026, 10:10
Ο Προγραμματισμός Προσανατολισμένος σε Αντικείμενα (Object-Oriented Programming – OOP) στην Python είναι ένας από τους πιο αποτελεσματικούς τρόπους για να κάνετε τον κώδικα σας πιο οργανωμένο, επαναχρησιμοποιήσιμο και πιο κοντά σε μοντέλα του πραγματικού κόσμου. Η Python, ως υβριδική γλώσσα που υποστηρίζει τόσο τον διαδικαστικό όσο και τον προσανατολισμένο σε αντικείμενα προγραμματισμό, καθιστά την εκμάθηση των εννοιών OOP απαραίτητη για έργα μέσου και προχωρημένου επιπέδου. Από το 2026, τα μεγάλα έργα (όπως Django, Flask, βιβλιοθήκες επιστήμης δεδομένων όπως Pandas, NumPy) και πλαίσια τεχνητής νοημοσύνης (TensorFlow, PyTorch) βασίζονται έντονα σε αρχές OOP.

Στο Google, αναζητήσεις όπως "Python OOP", "Python class", "Python inheritance", "Python polymorphism" έχουν πολύ υψηλό όγκο στην Τουρκία και παγκοσμίως. Ιδιαίτερα υποψήφιοι μηχανικοί λογισμικού, προγραμματιστές backend και επιστήμονες δεδομένων ερευνούν συχνά αυτό το θέμα. Η καλή κατανόηση του OOP σας επιτρέπει να γράφετε καθαρό κώδικα και παρέχει ευκολία συντήρησης σε μεγάλα έργα.

Γιατί Πρέπει να Μάθετε OOP στην Python; (Προοπτική 2026)
Η υποστήριξη OOP της Python είναι πολύ ευέλικτη: Τα πάντα είναι αντικείμενα (ακόμα και int, str, list προέρχονται από κλάσεις).

Βασικές Έννοιες OOP
Η κλάση είναι ένα πρότυπο/blueprint. Το αντικείμενο είναι μια συγκεκριμένη περίπτωση που δημιουργείται από αυτό το πρότυπο.
class Araba:  # Ορισμός κλάσης

    def __init__(self, marka, model, yil):  # Κατασκευαστής
        self.marka = marka
        self.model = model
        self.yil = yil
        self.km = 0  # Προεπιλεγμένη ιδιότητα

    def bilgi_ver(self):  # Μέθοδος
        return f"{self.yil} {self.marka} {self.model}, KM: {self.km}"

    def sur(self, km):
        self.km += km

# Δημιουργία αντικειμένων

araba1 = Araba("Toyota", "Corolla", 2020)
araba2 = Araba("BMW", "3 Serisi", 2022)

print(araba1.bilgi_ver())  # 2020 Toyota Corolla, KM: 0
araba1.sur(150)
print(araba1.bilgi_ver())  # 2020 Toyota Corolla, KM: 150
Η διατήρηση δεδομένων και μεθόδων μαζί, με περιορισμό της άμεσης πρόσβασης από έξω.
Στην Python, για ιδιωτικές ιδιότητες χρησιμοποιείται πρόθεμα _ ή __ (name mangling).
class BankaHesabi:
    def __init__(self, sahip, bakiye=0):
        self.sahip = sahip
        self.__bakiye = bakiye  # Ιδιωτική

    def para_yatir(self, miktar):
        self.__bakiye += miktar
        print(f" {miktar} € κατατέθηκαν.")  # Μεταφρασμένο σε ευρώ για παράδειγμα

    def para_cek(self, miktar):
        if self.__bakiye >= miktar:
            self.__bakiye -= miktar
            print(f" {miktar} € αναλήφθηκαν.")
        else:
            print("Ανεπαρκές υπόλοιπο!")

    def bakiye_sorgula(self):
        return self.__bakiye

hesap = BankaHesabi("Ahmet", 1000)
hesap.para_yatir(500)
hesap.para_cek(200)
print(hesap.bakiye_sorgula())  # 1300
# print(hesap.__bakiye)  # Σφάλμα (μη προσβάσιμο)

Μια κλάση κληρονομεί ιδιότητες και μεθόδους από άλλη κλάση.
class Arac:  # Γονική/Βασική κλάση
    def __init__(self, marka):
        self.marka = marka

    def calistir(self):
        print(f"{self.marka} λειτουργεί.")

class Araba(Arac):  # Παιδική/Παράγωγη κλάση
    def __init__(self, marka, model):
        super().__init__(marka)  # Κλήση κατασκευαστή γονέα
        self.model = model

    def bilgi(self):
        print(f"{self.marka} {self.model}")

class Motosiklet(Arac):
    def __init__(self, marka):
        super().__init__(marka)

    def tekerlek_sayisi(self):
        return 2

araba = Araba("Honda", "Civic")
araba.calistir()  # Honda λειτουργεί.
araba.bilgi()  # Honda Civic


Υποστηρίζεται επίσης πολλαπλή κληρονομικότητα (multiple inheritance):

class UcanAraba(Araba, Ucabilir):  # Υποθέτουμε ότι υπάρχει κλάση Ucabilir
    pass

Η ίδια μέθοδος συμπεριφέρεται διαφορετικά σε διαφορετικές κλάσεις.
class Kopek:
    def ses_cikar(self):
        print("Γαβ γαβ!")

class Kedi:
    def ses_cikar(self):
        print("Νιάου!")

def hayvan_ses(hayvan):
    hayvan.ses_cikar()  # Πολυμορφισμός

hayvanlar = [Kopek(), Kedi()]
for h in hayvanlar:
    hayvan_ses(h)

# Έξοδος:
# Γαβ γαβ!
# Νιάου!

Απόκρυψη περιττών λεπτομερειών. Στην Python, με το module abc δημιουργούνται αφηρημένες κλάσεις.
from abc import ABC, abstractmethod

class Sekil(ABC):  # Αφηρημένη βασική κλάση
    @abstractmethod
    def alan(self):
        pass

class Dikdortgen(Sekil):
    def __init__(self, en, boy):
        self.en = en
        self.boy = boy

    def alan(self):
        return self.en * self.boy

# sekil = Sekil()  # Σφάλμα: Η αφηρημένη κλάση δεν μπορεί να δημιουργηθεί απευθείας
d = Dikdortgen(5, 10)
print(d.alan())  # 50

Ειδικές Μέθοδοι (Magic/Dunder Methods)
Προσθέτουν ειδικές συμπεριφορές σε κλάσεις.
class Kitap:
    def __init__(self, baslik, yazar):
        self.baslik = baslik
        self.yazar = yazar

    def __str__(self):  # Για print()
        return f" {self.baslik} - {self.yazar}"

    def __len__(self):  # Για len()
        return len(self.baslik)

    def __add__(self, other):  # Για + τελεστή
        return f" {self.baslik} και {other.baslik}"

kitap1 = Kitap("1984", "George Orwell")
kitap2 = Kitap("Hayvan Çiftliği", "George Orwell")
print(kitap1)  # 1984 - George Orwell
print(len(kitap1))  # 4
print(kitap1 + kitap2)  # 1984 και Hayvan Çiftliği

Προχωρημένα Θέματα
• Property Decorator: Για getter/setter.
class Personel:
    def __init__(self, isim):
        self._isim = isim

    @property
    def isim(self):
        return self._isim

    @isim.setter
    def isim(self, yeni):
        if len(yeni) > 0:
            self._isim = yeni


• Classmethod και Staticmethod:
class Matematik:
    @classmethod
    def pi(cls):
        return 3.14159

    @staticmethod
    def topla(a, b):
        return a + b

Συμπέρασμα και Πρακτικές Συμβουλές
Το OOP είναι ένα από τα ισχυρότερα χαρακτηριστικά της Python. Αφού κατανοήσετε τα βασικά, εφαρμόστε τα σε πραγματικά έργα:

• Δημιουργήστε τη δική σας βιβλιοθήκη κλάσεων (π.χ. κλάση Χαρακτήρα για ένα παιχνίδι).
• Εξετάστε τα μοντέλα Django (πρακτική χρήση του OOP).
• Λύστε προβλήματα OOP στο LeetCode.
• Πόροι: Επίσημα έγγραφα Python (τμήμα classes), βιβλίο "Python Crash Course", tutorials OOP του Real Python.

Με αυτόν τον οδηγό, θα έχετε κατανοήσει πλήρως το OOP στην Python. Για εφαρμοσμένα παραδείγματα, αφήστε σχόλιο! Το 2026, το OOP θα σας παρέχει μεγάλο πλεονέκτημα στα μεγάλα έργα σας.