Skip to content

Dimitriskatsanos42/OOP

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Object-Oriented Programming in C++

Τρεις μικρές εφαρμογές, τρεις διαφορετικές "ιστορίες" — ένα άλογο που τρέχει σε αγώνα, ένας φοιτητής που γράφεται σε μάθημα, μια μηχανή που φτιάχνει καφέ. Το κοινό νήμα: όλα μοντελοποιούνται ως αντικείμενα με δικές τους ιδιότητες και συμπεριφορές, γραμμένα σε C++.

Αυτό το repository είναι η πρακτική εφαρμογή του μαθήματος Αντικειμενοστραφούς Προγραμματισμού — όχι θεωρία, αλλά τρία μικρά "κόσμοι" που φτιάχτηκαν από την αρχή με κλάσεις.


🐎 Horserace

Ένας αγώνας ιπποδρομιών με στοιχηματισμό. Ο χρήστης βάζει στοίχημα σε ένα άλογο, ο αγώνας "τρέχει" (με κάποιο στοιχείο τυχαιότητας), και στο τέλος υπολογίζονται κέρδη ή ζημιές.

classDiagram
    class Horse {
        -string name
        -int speed
        -float odds
        +run()
    }
    class Race {
        -Horse[] horses
        +start()
        +getWinner() Horse
    }
    class Player {
        -float balance
        -Bet currentBet
        +placeBet(Horse, amount)
        +collectWinnings()
    }
    class Bet {
        -Horse selectedHorse
        -float amount
    }
    Race "1" --> "*" Horse
    Player --> Bet
    Bet --> Horse
Loading

Το διάγραμμα παραπάνω είναι μια λογική πρόταση δομής — αν οι δικές σου κλάσεις λέγονται διαφορετικά ή έχουν άλλες σχέσεις, πες μου και το προσαρμόζω ακριβώς στον κώδικά σου.

Τι δείχνει για OOP: encapsulation του υπολοίπου του παίκτη (balance δεν αλλάζει απευθείας απ' έξω), και μια σχέση σύνθεσης ανάμεσα σε Race και Horse.


🎓 Course Registration

Σύστημα εγγραφής φοιτητών σε μαθήματα ενός πανεπιστημιακού προγράμματος. Ένας φοιτητής επιλέγει μαθήματα, το σύστημα ελέγχει διαθεσιμότητα/προαπαιτούμενα, και κρατάει τη λίστα εγγραφών.

classDiagram
    class Student {
        -string name
        -string studentId
        -Course[] enrolledCourses
        +enroll(Course)
        +dropCourse(Course)
    }
    class Course {
        -string title
        -int capacity
        -int enrolledCount
        +hasAvailableSpot() bool
    }
    Student "*" --> "*" Course : enrolls in
Loading

Τι δείχνει για OOP: σχέση many-to-many ανάμεσα σε Student και Course — το κλασικό παράδειγμα association που ξεπερνά την απλή κληρονομικότητα.


☕ Coffee Machine

Προσομοίωση μηχανής καφέ που διαχειρίζεται συναλλαγές: ο χρήστης επιλέγει προϊόν, βάζει χρήματα, η μηχανή ελέγχει αν αρκούν, δίνει ρέστα και ενημερώνει το απόθεμα.

classDiagram
    class CoffeeMachine {
        -Product[] menu
        -float cashInserted
        -int stock
        +selectProduct(id)
        +insertMoney(amount)
        +dispense()
    }
    class Product {
        -string name
        -float price
    }
    CoffeeMachine "1" --> "*" Product
Loading

Τι δείχνει για OOP: η κατάσταση της μηχανής (cashInserted, stock) μένει "κρυμμένη" μέσα στην κλάση — ο έξω κόσμος μιλάει μαζί της μόνο μέσω μεθόδων, ποτέ πειράζοντας απευθείας τις μεταβλητές της.


Γιατί αυτά τα τρία projects μαζί

Δεν είναι τυχαίο ότι διαλέχτηκαν τρία πολύ διαφορετικά σενάρια:

  • Το Horserace εξασκεί τυχαιότητα + σχέσεις 1-προς-πολλά
  • Το Course Registration εξασκεί σχέσεις πολλά-προς-πολλά
  • Το Coffee Machine εξασκεί διαχείριση εσωτερικής κατάστασης (state) και encapsulation

Μαζί, καλύπτουν τα περισσότερα από τα βασικά OOP patterns που συναντάει κανείς σε ένα πρώτο μάθημα C++.


Πώς να τα τρέξεις

git clone https://github.com/Dimitriskatsanos42/OOP.git
cd OOP

Κάθε φάκελος τρέχει ανεξάρτητα:

cd Horserace
g++ *.cpp -o horserace
./horserace
cd "Course registration"
g++ *.cpp -o course_registration
./course_registration
cd "Cofee machine"
g++ *.cpp -o coffee_machine
./coffee_machine

(Αν τα αρχεία .cpp έχουν διαφορετικά ονόματια entry point, προσάρμοσε ανάλογα την εντολή compile.)


Λίγα λόγια παραπάνω

Γράφτηκε σε C++, στο πλαίσιο μαθήματος Αντικειμενοστραφούς Προγραμματισμού. Ο στόχος δεν ήταν να φτιαχτούν "τέλεια" προγράμματα, αλλά να εξασκηθούν οι βασικές έννοιες: κλάσεις, encapsulation, σχέσεις μεταξύ αντικειμένων, και λίγη λογική simulation πάνω σε καθημερινά σενάρια (στοίχημα, εγγραφή σε μάθημα, αγορά καφέ).


About

Εφαρμογές Αντικειμενοστραφούς Προγραμματισμού σε C++: ιπποδρομίες με betting, σύστημα εγγραφών μαθημάτων, προσομοίωση μηχανής καφέ.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages