Προς το περιεχόμενο

Αντικειμενοστραφης προγραμματισμός σε mis


kurokokoro

Προτεινόμενες αναρτήσεις

Μετά από μια διαφωνία που είχα σχετικά με την χρήση oop σε mis θα ήθελα να ρωτήσω και την γνωμη άλλων προγραμματιστων. 

Ένα mis επωφελείται από την χρήση oop προσέγγισης ή είναι καλύτερα να είναι procedural.?

 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Πολύ γενικό και αόριστο ερώτημα.

Τι system requirements υπάρχουν, ποιο είναι το use case;

Θεωρητικά παντού επωφελείται κάποιος απο την αντικειμενοστρέφεια, εκτός απο συγκεκριμένες περιπτώσεις όπου απαιτείται κάποια procedural προσέγγιση για σωστή/ασφαλή χρήση μνήμης (embedded,system/kernel programming).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η χρήση του mis έχει να κάνει με εισαγωγή δεδομένων από χρήστες και παραγωγή reports. Το πιο περίπλοκο στο όλο σύστημα είναι τα queries στη βάση. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Το procedural και το Object Oriented δεν είναι έννοιες τις οποίες μπορείς να αντιμετωπίσεις ως αντίθετες. Η σχέση μεταξύ τους είναι αυτό που στα αγγλικά ονομάζεται orthogonal. Στα ελληνικά φαντάζομαι ότι θα το μεταφράζαμε ως «ανεξάρτητα»

Το αν κάτι είναι procedural ή όχι, έχει να κάνει με το control flow του προγράμματος. Αν το control flow είναι σειριακό (πρώτα κάνε αυτό, μετά το άλλο μετά το παράλλο κτλ) τότε έχεις procedural κώδικα. Ένα εναλλακτικό μοντέλο είναι το event based όπου το control flow δεν είναι προκαθορισμένο αλλά εξαρτάται από τον χρήστη (πχ ο χρήστης έκανε κλικ στο κουμπί cancel)

Το αν θα χρησιμοποιήσεις αντικειμενα για να μοντελοποιήσεις το πρόβλημα που προσπαθείς να λύσεις είναι άλλο θέμα. Μπορείς να έχεις procedural OOP, καθώς επίσης και event-based OOP (πχ σχεδόν όλα τα GUI libraries αυτό το μοντέλο ακολουθούν). Μπορείς επίσης να έχεις non OOP procedural κώδικα, όπως και non-OOP event based κώδικα.

Για περισσότερες πληροφορίες δες εδώ: https://stackoverflow.com/questions/22101731/what-is-the-relation-of-event-driven-and-object-oriented-programming/28135353#28135353

Τέλος, μια σημαντική παράμετρος που παραλείπεις είναι η γλώσσα που θα χρησιμοποιήσεις. Αν πχ γράψεις σε Java, είναι αφύσικο να μην είναι OOP ο κώδικάς σου ενώ αν γράψεις σε lisp-οειδή πάλι, θα είναι αφύσικο αν είναι OOP ο κώδικάς σου...

Επεξ/σία από pmav99
  • Thanks 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
57 λεπτά πριν, pmav99 είπε

Εγώ πάλι για να είμαι ειλικρινής έχω απορία για το είναι το «mis»...

Η γλώσσα είναι php και το framework που έχει στηθεί είναι διάφορες μέθοδοι που καλούνται στατικά. Πχ υπάρχει η κλάση users η οποία έχει στατικές μεθόδους που κάνουν insert update και delete. Το framework αυτό είναι procedural αφού δεν έχει ουσιαστικά τίποτα που να παραπέμπει σε oop.

Το βασικό επιχείρημα της άλλης πλευράς είναι πως δεν θα επωφεληθεί ένα τέτοιο σύστημα από oop προσέγγιση. 

Edit: έχω μπει κι από κινητό και γράφω στο forum σαν πιθηκάκι που έχει πιει σαμπάνια... Εξου και οι άσχετες παραθέσεις 

Επεξ/σία από kurokokoro
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)
1 hour ago, kurokokoro said:

Το framework αυτό είναι procedural αφού δεν έχει ουσιαστικά τίποτα που να παραπέμπει σε oop.

Αν κάτι είναι OOP ή όχι (αν δηλαδή χρησιμοποιεί αντικείμενα ή όχι) είναι ανεξάρτητο με το αν ειναι procedural ή όχι.

Τέσπα, για να μη θεωρητικολογήσουμε και άλλο. Είναι νομίζω προφανές ότι ο κώδικας σας είναι procedrual. Αν το ερώτημα σου είναι αν θα έχετε πλεονεκτήματα από τη χρήση custom αντικειμένων ή όχι, η απάντηση είναι εξαρτάται. Σίγουρα γίνεται με αντικείμενα, σίγουρα γίνεται και χωρίς αντικείμενα. Μεταξύ άλλων η απάντηση έχει να κάνει και με την αισθητική του καθενός.

Anyway, αν γίνει σωστή μοντελοποίηση των αντικειμένων τότε συνήθως καταλήγεις με ένα κομψό API. Αν πάλι πας σε σκέτες συναρτήσεις τότε συχνά είναι πιο εύκολο να γράψεις tests (δεν χρειάζεται να δημιουργείς instances, να μπλέκεις με mocks κτλ).

# OOP
class User:
    def __init__(name):
        this.name = name
        
    def create():
        # code that inserts a new record in the database
        
user = User(name='pmav99')
user.create()

# non OOP
def create_new_user(name):
    # code that inserts a new record in the database
    
create_new_user(name='pmav99')

 

Επεξ/σία από pmav99
  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αν η πληροφορία που υπάρχει σε έναν πίνακα αντιστοιχίζεται σε ένα αντικείμενο τότε βολεύει το OOP.
Από την άλλη μπορείς να γράψεις όλο το business logic(reports) σε stored procedures και μέσω κάποιου ORM να φτιάξεις custom
αντικείμενα για να είναι ποιο εύκολο το mapping της πληροφορίας. Το τελευταίο δε γνωρίζω αν είναι σχεδιαστικά "σωστό", παρόλα αυτά
το έχω δοκιμάσει σε project και δούλευε μια χαρά και γρήγορα.

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...