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

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

  • Απαντ. 32
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοφιλείς Ημέρες

Δημοσ.

το πιο σωστό είναι να χρησιμοποιήσεις interfaces αλλά δεν το λέει η άσκηση.

οπότε πρέπει να φτιάξεις μόνο κλάσεις.

 

δεν λέει η άσκηση να χρησιμοποιήσει μόνο κλάσεις. στο θέμα 1 σε προιδεάζει με την ερώτηση αν οι διεπαφές δημιουργούν ξεχωριστή ιεραρχία... και στο θεμα 2 σε ρωτάει με ποιον τροπο μπορείς να το υλοποιήσεις σε Java...

 

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

Δημοσ.

Αυτο ακριβως!!!

 

Δεν χρειαζεσαι την πλευρα του τετραγωνου για να βρεις το εμβαδον του αλλα θα πας με τον τυπο με το diagonal για το Ε, για τον οποιο σου δινει 2 τιμες


δεν λέει η άσκηση να χρησιμοποιήσει μόνο κλάσεις. στο θέμα 1 σε προιδεάζει με την ερώτηση αν οι διεπαφές δημιουργούν ξεχωριστή ιεραρχία... και στο θεμα 2 σε ρωτάει με ποιον τροπο μπορείς να το υλοποιήσεις σε Java...

 

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

 

Ο αθλητεχνης ειναι ΕΠΟΣ!!

Δημοσ.

οκ τα greeklish, αλλά υπάρχουν και κάποια πρότυπα ονοματολογίας στην Java, δεν τα γνωρίζει; και κάνει και Java;

  • Like 1
Δημοσ.

υπάρχουν και κάποια πρότυπα ονοματολογίας στην Java, δεν τα γνωρίζει; και κάνει και Java;

Συγγνώμη που βγαίνω εκτός θέματος αλλά μήπως ζητάς πολλά ? :)

 

Στη δική μου σχολή όταν εισήχθη η Java, την έδωσαν στο καθηγητή που έκανε c, c++, fortran, prolog, κτλ (με δεδομένο ότι το 95% των καθηγητών ήταν φυσικοί - μαθηματικοί θεώρησαν φαίνεται ότι είναι ο πιο σχετικός με το αντικείμενο).

 

Μας παραδέχθηκε λοιπόν τις πρώτες μέρες στο μάθημα ότι δε γνωρίζει Java παρά μόνο τα βασικά και ότι θα τη μάθουμε σιγά σιγά μαζί. Οι κώδικες που γράφαμε ήταν ουσιαστικά C με σύνταξη Java.

 

Εσένα σε πείραξαν τα ονόματα των μεταβλητών ? :P

Δημοσ.

Ρε δεν χρεαιζεται να γινει θεμα τωρα το αν ο καθηγητης εβαλε greeklish η επρεπε να ακολουθει τους γενικους κανονες.

 

Πιστευω οτι το εκανε για θεματα κατανοησης.

Δημοσ.

.........................................

 

Και αυτό τώρα με τον αθλητέχνη είναι άσκηση σε τμήμα μηχανικών ΗΥ και πληροφορικής.

 

Σα να λέμε υπάρχουν αθλητές στίβου, κολύμβησης, μπάσκετ, ποδοσφαίρου, τένις και βόλει (ας μη συνεχίσω). Το να μοντελοποιήσεις το ενδεχόμενο κάποιος άνθρωπος να είναι αθλητής σε παραπάνω από μία κατηγορία ταυτόχρονα με classes απλά δε γίνεται. Το να το μοντελοποιήσεις χρησιμοποιώντας interfaces γίνεται... βέβαια αν θέλεις να το κάνεις θα πρέπει να γράψεις με το χέρι 2^6 διαφορετικές classes, και η έκτη δύναμη αυξάνεται κατα 1 για κάθε κατηγορία που μας ενδιαφέρει να προσθέσουμε.

 

Απλά τραγικό και τελείως λάθος παράδειγμα για να μάθεις σε κάποιον πώς και πότε χρησιμοποιείται το inheritance και τα interfaces. Εκτός αν σκοπεύεις να τους το μάθεις με τη μέθοδο του παραδείγματος προς αποφυγή.

 

Sorry για το rant. Αλλά χθες προχθές βλέπεις το θέμα "σε ποιά σχολή να πάω για να γίνω προγραμματιστής", σήμερα βλέπεις αυτό και μετά θέλεις ν' αυτοκτονήσεις.

 

Μια φιλική συμβουλή σε όλους όσους ακόμα μαθαίνουν ΟΟ: αν πας να βάλεις inheritance, κατά 99% έχεις ήδη κάνει λάθος.

 

@vagg77: Έτσι που έχεις διατυπώσει την ερώτηση υπάρχει πρόβλημα καταρχήν επειδή έχεις μπλέξει μέσα κάτι τελείως άσχετο με την περίπτωσή σου. Εκείνη η ερώτηση στο SO δεν ασχολείται με το να ανήκει ένα αντικείμενο σε 2 κλάσεις. Ασχολείται με το να χρησιμοποιήσεις το ίδιο στιγμιότυπο ( :eek: ελληνική ορολογία) σε δύο διαφορετικά μέρη του προγράμματος. Επομένως δεν έχει νόημα να εφαρμόσεις κάτι τέτοιο σα λύση, είναι σα να λες ότι θέλω να βάψω τον τοίχο και εφήρμοσα τη λύση στο πώς καρφώνουμε ράφι έτσι που να είναι ίσιο.

 

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

class kallitexnis extends anthropos {}
class athlitexnis extends kallitexnis {} // έγκλημα κατά της ανθρωπότητας
class athkal-kolimvisis extends athlitexnis {} // δε φταιει το παιδί, οι γονείς φταίνε
  • Like 3
Δημοσ.

Μια φιλική συμβουλή σε όλους όσους ακόμα μαθαίνουν ΟΟ: αν πας να βάλεις inheritance, κατά 99% έχεις ήδη κάνει λάθος.

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

 

Εκτός αν δε σε έπιασα.

Δημοσ.

Νομίζω δε με έπιασες.

 

Το inheritance είναι σε πολλές περιπτώσεις (μια από αυτές η Java) η ισχυρότερη μορφή σχέσης που μπορείς να εισάγεις ανάμεσα σε δύο έννοιες που αφορούν το problem domain που έχεις στα χέρια σου. Στην προκειμένη εφόσον μιλάμε για inheritance αυτές οι έννοιες έχουν απαραίτητα μοντελοποιηθεί ως classes, το οποίο σημαίνει ότι πριν καν φτάσεις στο σημείο να μπορείς να γράψεις "extends" και να κάνει compile το πρόγραμμα έχεις ήδη πάρει πολύ σημαντικές και συγκεκριμένα πολύ δεσμευτικές αποφάσεις για τη δομή του προγράμματος.

 

Αυτό φυσικά είναι κάτι που δεν περνάει καν από το μυαλό του μαθητευόμενου γιατί δεν του έχει πει κανείς ότι πρώτα ξεκινάς από ένα αφηρημένο μοντέλο και μετά το μεταφράζεις με όρους (language features) που αναγνωρίζει η Java. Αντίθετα του έχουν πει "κοίτα να δεις τι ωραία, γράφεις class και extends και αμέσως ο compiler καταλαβαίνει ότι η αγελάδα είναι θηλαστικό". Δηλαδή του δείχνουν τη "λύση" προτού καν του εξηγήσουν ποιό είναι το πρόβλημα. Μετά φυσικά αυτός πάει και βάζει inheritance παντού επειδή όπως λένε when all you have is a hammer, everything looks like a nail και καταλήγεις να βλέπεις ερωτήσεις του στυλ

 

"βρες το λάθος εδώ και πρότεινε βελτίωση"

class Car extends Engine {}

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

 

Σ' αυτό το σημείο κάνε google "overuse of inheritance" ή κάτι παρόμοιο. Αν αφιερώσεις χρόνο θα δεις ότι δε μιλάω για ένα "αφηρημένο" πρόβλημα αλλά για πραγματική μάστιγα, από τις οποίας τα νύχια αν θέλεις να σώσεις κάποιον πρέπει αφού περάσει τη Java να κάτσεις να του πεις "λοιπόν, όλα αυτά που έχεις μάθει ξέχασέ τα γιατί είναι λάθος, θα το πάρουμε πάλι από την αρχή".

 

Στην προκειμένη περίπτωση το παράδειγμα που επιλέχθηκε είναι τελείως ακατάλληλο γιατί υπάρχουν Ν "είδη αθλητών" και δεν είναι καθόλου ξεκάθαρο για ποιό λόγο το κάθε είδος πρέπει να είναι διαφορετικό από τα άλλα σε επίπεδο type system, δηλαδή δεν υπάρχει καλή προφανής απάντηση στην ερώτηση "τι ακριβώς προσφέρει η ύπαρξη και μόνο της class ath-stoivou?". Υπάρχει η κακή προφανής απάντηση "προσφέρει ότι είναι προφανές στο φοιτητή μου πού πρέπει να γράψει extends για να τον περάσω". Το οποίο είναι ικανός λόγος ύπαρξης της class αν θέλεις να περάσεις το μάθημα, αλλά όχι αν θέλεις να μάθεις προγραμματισμό.

  • Like 4
Δημοσ.

Αν θες να ανήκει σε 2 κλάσεις δεν μπορείς, για αυτό είναι τα interfaces.

Η Java δεν υποστηρίζει κληρονομικότητα σε πάνω από 1 κλάσεις.

 

Μπορεί να τον κάνει να φρικάρει λίγο και να χρησιμοποποιήσει default method implementations που υποστηρίζει η Java 8 για τα interfaces :P

Δημοσ.

Εχω ειδη φρικαρει για αυτο και αποφασισα να προχωρησω στην 4 και να την λυσω. Η επομενη ερωτηση θα ειναι λογικα και η τελευταια μου γτ δεν εχω αλλο θεμα με τις αλλες ασκησεις. Εχω φτιαξει τον κωδικα της 4 αλλα παιρνω τα εξης errors :

 

SMWindow.java:83: error: class CheckWindow is public, should be declared in a file named CheckWindow.java
public class CheckWindow
^
SMWindow.java:62: error: no suitable constructor found for MWindow()
public class SMWindow extends MWindow{
^
constructor MWindow.MWindow(int) is not applicable
(actual and formal argument lists differ in length)
constructor MWindow.MWindow(boolean) is not applicable
(actual and formal argument lists differ in length)
2 errors

class Window
{
  public static int count = 0;
  public int size = 3;
  public Window()
    {
      this.size = 0;
      count++;
    }
  public void setSize(int x)
    {
        size = x;
    }
  public void printSize1()
    {
        System.out.println(size);
    }
}




class MWindow extends Window{
    protected int size = 1;
    protected boolean dmode;
    String smaller = "";
    
    public MWindow(boolean dmode)
    {
        this.dmode = dmode;
    }
    public MWindow(int size)
    {
        this.size = size;
    }
    public void setSize1(int x)
    {
        size = --x;
    }
    public void setSize2(int x)
    {
        super.setSize(x);
    }
    public void printSize1()
    {
        System.out.println(size);
    }
    public void printSize2()
    {
        System.out.println(super.size);
    }
    public String smaller(SMWindow sw1, SMWindow sw2)
    {


    if (sw1.Ew<sw2.Ew)
    smaller = "sw1";
    else
    smaller = "sw2";
    return smaller;
    System.out.println("Το μικροτερο ειναι το " + smaller);
    }
}




public class SMWindow extends MWindow{
int plies;
float diagonal,Ep,Ew;
public float win_area (int diagonal)
{
    Ew = ( (diagonal^2) / 2.0f );
    return Ew;
}
public float ply_area (int plies)
{
    Ep = Ew / plies;
    return Ep;
}
public void printInfo()
{
    System.out.println("Εμβαδο Παραθυρου = " + Ew);
    System.out.println("Εμβαδο Παραθυροφυλλου = " + Ep);
}
}




public class CheckWindow
{
    public static void main(String args[])
    {
        MWindow w1 = new MWindow (true);
        MWindow w2 = new MWindow (7);
        Window w = new Window();
        System.out.println(w1.size);
        System.out.println(w2.dmode);
        System.out.println(w.count);
        w.setSize(6);
        w1.setSize(4);
        System.out.println(w1.size);
        w1.setSize(5);
        System.out.println(w1.size);
        w1.setSize2(5);
        w1.printSize1();
        w1.printSize2();
        SMWindow sw1 = new SMWindow();
        SMWindow sw2 = new SMWindow();
        sw1.ply_area(3);
        sw1.win_area(12);
        sw2.ply_area(4);
        sw2.win_area(16);
        sw1.printInfo();
        sw2.printInfo();
        SMWindow smaller = new SMWindow();
        smaller.smaller(sw1,sw2);
        
    }
}
    
    

Εχω κατασκευασει την  νεα κλαση SMWindow και την νεα μεθοδο smaller στην ΜWindow και φτιαχνω αντικειμενα και καλω τις μεθοδους στην CheckWindow.

Δημοσ.

Δεν καταλαβαινω τι πρεπει να κανω για να τα διορθωσω


π.χ για πιο λογο δεν μου φτιαχνει το αρχειο CheckWindow.java στο φακελο και εχει τα αλλα

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

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

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

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

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

Σύνδεση

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

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