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

Oop????


Hatman

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

Δημοσ.

Kalhspera se olous. Programatizw xronia se diafore procedural lanlguages opws vb6(+asp+vba),php,c kai exw pai3ei kai me java ligo alla logw taxythtas thn afhsa sthn akrh. Twra exw arxisei na grafw se c# kai exw brei thn ygeia mou apo polles apopseis.

 

To zhthma mou einai loipon. Ola wraia kai ola kala me tis OOP kai ftiaxnw kai xrisimopoiw clases kai ola swsta alla otan ftanoume sto shmeio pou ftiaxnoume ena Project kai ayto xriazetai databases tote ti ginetai? To thema mou den einai na mou peite ton kwdika... Exw ftia3ei arketes efarmoges me database. To thema mou einai pame pali sthn procedural diadhkasia????? Ypo poia apopsh rwtaw? Thewritika sto OOP ta instances kanoun encapsulation swsta? Ara re karamhtro pws thewritika exeis ta data sta instances alla sthn pra3h kaneis factoids h kratas ta data sou mono gia kapoia instances pou douleyeis.

 

Vlepete to thema mou einai perisotero thewritiko para praktiko.

Opoiadhpote bohtheia welcomed.

 

Thank u.

Δημοσ.

Η OOP προσέγγιση για τα δεδομένα υπάρχει και μέσα από το Visual Studio 2003 αλλά περισσότερο στο Visual Studio 2005. Είναι τα typed datasets, που μεταφέρουν τα δεδομένα των πινάκων, αφού τα χαρτογραφήσουν σε κλάσεις, σε αντικείμενα στην μνήμη.

 

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

 

Το "κακό" που έχουν αυτές οι κλάσεις, είναι ότι αντιστοιχούν μία για κάθε πίνακα της βάσης σου, μη δίνοντάς σου την δυνατότητα να μπορείς να ελέγξεις μια οντότητα, που μπορεί να αποτελείται από περισσότερα από ένα tables, από μια τέτοια κλάση.

 

Αν έχεις μια τέτοια περίπτωση, μπορείς να χρησιμοποιήσεις, διαθέσιμα frameworks που κάνουν αυτή τη δουλειά, όπως το NHibernate, που είναι ένα Open Source project.

 

 

George J.

Δημοσ.
[font=Georgia

 

Το "κακό" που έχουν αυτές οι κλάσεις, είναι ότι αντιστοιχούν μία για κάθε πίνακα της βάσης σου, μη δίνοντάς σου την δυνατότητα να μπορείς να ελέγξεις μια οντότητα, που μπορεί να αποτελείται από περισσότερα από ένα tables, από μια τέτοια κλάση.

 

 

 

George J.

 

 

Δεν εχει η C# κατι αντιστοιχο με τα ResultSet στη java? Δηλαδη να μπορεις να τρεξεις ενα SQL ερωτημα και το αποτελεσμα να μπει σε ενα τετοιο object για χρηση απο το προγραμμα? Σιγουρα θα εχει. Οποτε γιατι να μην μπορεις να ελεγξεις πανω απο ενα πινακα αμα το ερωτημα χρησιμοποιει πανω απο ενα πινακα?

Δημοσ.

Prwta apo ola eyxaristw gia to endiaferon.

 

Nai synfwnw gia ta datasets alla eimai akoma ligo mperdemenos. To prwblhma mou phgazei apo 2 paragontes. Ptwton exw akoma thn logikh twn procedural languages pou kaneis oti thes me functions. Kata deytero eimai londino kai kanw to master mou se business system analysis and design kai h texnikh pou exei yothetisei to to panepisthmio einai OOAD... Ws apotelesma mas exoun liwsei thn UML.

 

To thema mou einai mallon oti prospathw na ta metafrasw ola ayta se uml kai to zori mou einai oti telika estw kai me ta datasets.. tha xrishmopoiw ayta ta objects gia na milaw me database? Na to pw alliws. Ta datasets tha einai ta boundary clases mou?

 

Kapws Akoma kai ayta den einai fix dhladh prepei na ta valw mesa se dika mou clases gia na milane me thn database kai na kanw ton kwdika reusable. To lew ayto giati ta perisotera "tutorials" se c# milane me DBs xrhsimopoiwntas kwdika ws procedural languages(mesa sto main kanoume ta panta. Vasika sto Form alla leme twra).

 

Telika poios einai o swstos tropos na epikoinwneis me mia database me OOP???

 

Eyxaristw gia ton xrono sas.

Δημοσ.
Δεν εχει η C# κατι αντιστοιχο με τα ResultSet στη java? Δηλαδη να μπορεις να τρεξεις ενα SQL ερωτημα και το αποτελεσμα να μπει σε ενα τετοιο object για χρηση απο το προγραμμα? Σιγουρα θα εχει. Οποτε γιατι να μην μπορεις να ελεγξεις πανω απο ενα πινακα αμα το ερωτημα χρησιμοποιει πανω απο ενα πινακα?

 

Ο σκοπός είναι να δεις σαν αντικείμενο κάθε πίνακα από την βάση σου.

 

Ναι, βέβαια και υπάρχει αντίστοιχο αντικείμενο του resultset, το datareader, αλλά για να βάλει τα αποτελέσματα σε ένα object που έχει σχεδιάσει ο προγραμματιστής μέσα στην εφαρμογή του, θα πρέπει αφού λάβει τα δεδομένα από την βάση δεδομένων μέσα στο resultset, να έχει ένα loop που να τα φορτώσει μέσα στο object του.

 

Αντίστοιχα όταν θα κάνει αλλαγές μέσα στο object του, θα πρέπει να έχει γράψει κώδικα που θα εκτελεί SQL statements για να ενημερώνει την βάση για κάθε object που γίνεται αλλαγή.

 

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

 

Φυσικά οι αλλαγές θα περάσουν στην βάση με SQL statements, αλλά ο προγραμματιστής δεν έχει ασχοληθεί να φτιάξει αυτό τον κώδικα, μιας και παρέχεται αυτόματα από το dataset.

 

Έτσι ο προγραμματιστής έχει κερδίσει το χρόνο, που απαιτείται να σχεδιάσει ένα object που θα φιλοξενήσει τα δεδομένα του, και να γράψει όλο τον κώδικα που θα συγχρονίζει τα δεδομένα με την βάση.

 

Αν αυτός ο χρόνος πολλαπλασιαστεί για πολλά tables, μπορείς να καταλάβεις, πόσο πιο σύντομα ο προγραμματιστής είναι σε θέση να τελειώσει την εφαρμογή του, και σαφώς με λιγότερο κόπο.

Αυτός ο μηχανισμός για να μπορέσει αυτόματα να εκτελέσει τον χειρισμό των δεδομένων, θα πρέπει να χειρίζεται ένα table κάθε φορά.

 

 

 

 

George J.

Δημοσ.
Prwta apo ola eyxaristw gia to endiaferon.

 

Nai synfwnw gia ta datasets alla eimai akoma ligo mperdemenos. To prwblhma mou phgazei apo 2 paragontes. Ptwton exw akoma thn logikh twn procedural languages pou kaneis oti thes me functions. Kata deytero eimai londino kai kanw to master mou se business system analysis and design kai h texnikh pou exei yothetisei to to panepisthmio einai OOAD... Ws apotelesma mas exoun liwsei thn UML.

 

To thema mou einai mallon oti prospathw na ta metafrasw ola ayta se uml kai to zori mou einai oti telika estw kai me ta datasets.. tha xrishmopoiw ayta ta objects gia na milaw me database? Na to pw alliws. Ta datasets tha einai ta boundary clases mou?

 

Kapws Akoma kai ayta den einai fix dhladh prepei na ta valw mesa se dika mou clases gia na milane me thn database kai na kanw ton kwdika reusable. To lew ayto giati ta perisotera "tutorials" se c# milane me DBs xrhsimopoiwntas kwdika ws procedural languages(mesa sto main kanoume ta panta. Vasika sto Form alla leme twra).

 

Telika poios einai o swstos tropos na epikoinwneis me mia database me OOP???

 

Για να σου ξεκαθαρίζω σιγά-σιγά τα πράγματα.

 

Το dataset είναι OOP προσέγγιση στην ανάκτηση/ενημέρωση δεδομένων. Υπάρχει μια κλάση, που εσύ την κάνεις instance σε ένα object και το χρησιμοποιείς. Όταν τελειώνεις το κατεβάζεις από την μνήμη.

 

Στην δική σου περίπτωση, τώρα και την ανάγκη της υλοποίησης των use cases που έχεις φτιάξει με την UML. Για την εργασία σου , θα πρέπει να φαίνονται καθαρά οι functions που προκύπτουν από τα use cases, που θα πρέπει να διαμορφώσουν το business layer.

 

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

 

Τα περισσότερα παραδείγματα που δείχνουν την χρήση του ADO.NET είναι του τύπου Ajax για τα τζάμια - ανοίχτε την βάση, εκτελέστε ένα SQL statement, διαβάστε τα results και τελειώσατε. Αυτή η διαδικασία δεν είναι OOP, είναι παράδειγμα χρήσης, και δεν το κάνει κανένας που θέλει να κάνει, είτε procedural, είτε object oriented προγραμματισμό.

 

Εσύ θα πρέπει να υλοποιήσεις το data layer, έστω με την χρήση των datasets, και στην συνέχεια, να φτιάξεις καινούργιες classes να περιέχουν τις functions που θα υλοποιούν τα use cases, αλλά θα χρησιμοποιούν τα datasets για να μιλήσουν στην βάση, υλοποιώντας το business layer.

 

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

  • Αν έχεις μια εφαρμογή που θα την χρησιμοποιήσουν 3-5 άτομα και θα έχει 5 πίνακες στην βάση, μπορείς να προσθέσεις το Business layer μέσα στα datasets και να τελειώσεις γρήγορα.
  • Αν έχεις μια εφαρμογή που θα έχει 50 πίνακες θα θέλεις γρήγορα να κάνεις αλλαγές/προσθήκες στο bussiness layer χωρίς να επηρεάζεις τα υπόλοιπα layers δεν μπορείς να βάλεις τις functions που υλοποιούν τα use cases σου μέσα στα datasets - θα πρέπει να έχεις πρόσθετες classes που θα χρησιμοποιούν τα datasets για να ελέγχουν τα δεδομένα
  • Αν έχεις μια εφαρμογή που θα πρέπει να είναι near real time - να γίνονται transactions για την ενημέρωση των δεδομένων της, δεν σου κάνουν τα datasets - θα πρέπει να γράψεις τις κλάσεις του data layer μία προς μία, ώστε να ικανοποιήσεις τις ειδικές συνθήκες που θα έχει η εφαρμογή για να χειριστεί τα δεδομένα.

Και οι τρεις παραπάνω τρόποι είναι σωστοί, αρκεί να χρησιμοποιηθούν στην κατάλληλη περίπτωση.

 

 

George J.

Δημοσ.
Ο σκοπός είναι να δεις σαν αντικείμενο κάθε πίνακα από την βάση σου.

 

Ναι, βέβαια και υπάρχει αντίστοιχο αντικείμενο του resultset, το datareader, αλλά για να βάλει τα αποτελέσματα σε ένα object που έχει σχεδιάσει ο προγραμματιστής μέσα στην εφαρμογή του, θα πρέπει αφού λάβει τα δεδομένα από την βάση δεδομένων μέσα στο resultset, να έχει ένα loop που να τα φορτώσει μέσα στο object του.

 

Αντίστοιχα όταν θα κάνει αλλαγές μέσα στο object του, θα πρέπει να έχει γράψει κώδικα που θα εκτελεί SQL statements για να ενημερώνει την βάση για κάθε object που γίνεται αλλαγή.

 

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

 

Φυσικά οι αλλαγές θα περάσουν στην βάση με SQL statements, αλλά ο προγραμματιστής δεν έχει ασχοληθεί να φτιάξει αυτό τον κώδικα, μιας και παρέχεται αυτόματα από το dataset.

 

Έτσι ο προγραμματιστής έχει κερδίσει το χρόνο, που απαιτείται να σχεδιάσει ένα object που θα φιλοξενήσει τα δεδομένα του, και να γράψει όλο τον κώδικα που θα συγχρονίζει τα δεδομένα με την βάση.

 

Αν αυτός ο χρόνος πολλαπλασιαστεί για πολλά tables, μπορείς να καταλάβεις, πόσο πιο σύντομα ο προγραμματιστής είναι σε θέση να τελειώσει την εφαρμογή του, και σαφώς με λιγότερο κόπο.

Αυτός ο μηχανισμός για να μπορέσει αυτόματα να εκτελέσει τον χειρισμό των δεδομένων, θα πρέπει να χειρίζεται ένα table κάθε φορά.

 

 

 

 

George J.

 

Πολυ ενδιαφερον. Μηπως ξερεις πως λεγεται και αν υπαρχει στη java το αντιστοιχο των datasets?

Εχω και εγω μια εργασια στο αμεσο μελλον που σκοπευα να την υλοποιησω με ResultSet αλλα αυτη η προσεγγιση που δινεις ισως φανει χρησιμη.

Δημοσ.
Πολυ ενδιαφερον. Μηπως ξερεις πως λεγεται και αν υπαρχει στη java το αντιστοιχο των datasets?

Εχω και εγω μια εργασια στο αμεσο μελλον που σκοπευα να την υλοποιησω με ResultSet αλλα αυτη η προσεγγιση που δινεις ισως φανει χρησιμη.

 

Αντίστοιχη λειτουργικότητα στην γλώσσα δεν υπάρχει. Αλλά μπορείς να καταφέρεις παρόμοιο αποτέλεσμα με την χρήση του Hibernate.

George J.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...