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

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

Δημοσ.

Ανοιγω το θέμα γιατι κάποτε πρεπει να αρχισουμε να σχεδιαζουμε.

 

Απο που πρεπει να ξεκινήσει κάποιος ετσι ωστε να μπορεί να σχεδιάσει ενα πρόγραμμα;( ΜΟΝΟ σχεδιαση οχι κώδικα! )

Γνωρίζω πως υπάρχουν αρκετα εργαλεία για την σχεδιάση λογισμικου οπως το ArgoUml για παραδείγμα ομως θα πρεπει να γνωρίζεις UML.Επίσης πρωτα θα πρεπει να μάθεις τα design patterns και μετα την UML ;Γενικα γενικα λοιπον ποια βήματα πρεπει να ακολουθήσει κάποιος για να μπορεί να ανταπεξέλθει σιγα σιγα σε μια εταιρία κατασκευης λογισμικου ας πουμε...

Δημοσ.

Πιστεύω ότι πρώτα πρέπει να γράψεις την αρχιτεκτονική του συστήματος.

Τα UML και τα Design Patterns είναι μέρος της όλης αρχιτεκτονικής.

Στη σχολή έχω γράψει (ως μέλος ομάδας) 5 εγγραφα αρχιτεκτονικής συστήματος σαν εργασίες μαθημάτων και ακολουθούσαμε την παρακάτω σειρά (με ελάχιστες αλλαγές). Στα 3 χρειάστηκε να προγραμματίσουμε το σύστημα μετά την ολοκλήρωση του εγγράφου (φυσικά τα κάναμε λίγο παράλληλα, γιατί το κάθε μάθημα διαρκεί 10 βδομάδες)

 

1. Introduction and Goals

1.1 Executive summary

1.1.1 Objectives

1.1.2 Vision

1.1.3 Processes for the system

1.2 Project Introduction

1.2.1 System Context

1.2.2 The current situation

1.2.3 Why should the system exist

1.3 Stakeholders

1.4 Key drivers

1.5 Functional requirements

1.6 Non-functional requirements

2. Architecture costraints

2.1 Technical constraints

2.2 Organizational constraints

2.3 Conventions

3. System scope and Context

3.1 Business context

3.2 Technical- or Infrastructural context

4. Risk Analysis and Risk Mitigation Strategy

4.1 Management

4.1.1 Cost and revenu

4.1.2 Popularity and Usage

4.2 Development

4.2.1 Maintenance and long-term support

4.2.2 During design and implementation

4.3 Runtime

5. Building Block View (UML)

6. Runtime View (UML)

7. Deployment View (UML)

8. Recurring or Generic Structures and Patterns (Όλα τα Design Patterns που χρησιμοποιείς)

9. Technical Concepts and Architectural Aspects

9.1 Persistency

9.2 User Interface

9.3 Ergonomics

9.4 Flow control

9.5 Transaction Processing

9.6 Session Handling

9.7 Security

9.8 Communication and Integration with other Software Systems

9.9 Distribution

9.10 Exception / Error Handling

9.11 System Management and Administration

9.12 Logging and Tracing

9.13 Business Rules

9.14 Configurability

9.15 Parallelization and Threading

9.16 Internationalization

9.17 Migration

9.18 Testability

9.18.1 Unit Testing

9.18.2 Integration Testing

9.18.3 System Testing

9.19 Plausibility and Validity Checks

9.20 Code Generation

9.21 Build-Management

10 Design Decisions

11. Scenarios for Architecture Evaluation

11.1 Requirements Verification

11.2 Architecture Evaluation

11.2.1 Generate Quality Attribute Utility Tree

11.2.2 Analyze Architectural Approaches

11.3 Conclussion

 

Μία πολύ καλή πηγή είναι αυτό το βιβλίο. Δεν είναι για διάβασμα από την αρχή μέχρι το τέλος, αλλά για να σε βοηθήσει σε κάθε σημείο.

Δημοσ.

Ερώτηση:

 

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

να δηλώσω στην Tcustomer κλάση , την void printRenter( void ) μέθοδο ώς virtual.

 

>
/**
*  Βase class
*/
class Trenter {

public:

virtual void printRenter(void){ cout << "I am renter"; };
};

/**
*  derived class
*/
class Tcustomer : public Trenter {

public:

virtual void printRenter( void ){ cout << "I am customer"; };
};


 

επίσης θα πρέπει constructor και destructor να οριστουν σαν virtual ;

Δημοσ.

Ερώτηση:

 

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

να δηλώσω στην Tcustomer κλάση , την void printRenter( void ) μέθοδο ώς virtual.

 

>
/**
*  Βase class
*/
class Trenter {

public:

virtual void printRenter(void){ cout << "I am renter"; };
};

/**
*  derived class
*/
class Tcustomer : public Trenter {

public:

virtual void printRenter( void ){ cout << "I am customer"; };
};


 

επίσης θα πρέπει constructor και destructor να οριστουν σαν virtual ;

 

1ον η ερώτηση σου είναι άσχετη με το θέμα που δημιούργησες....

2ον O κώδικας που έχεις είναι C++ λογικά. Δεν είμαι ο κατάλληλος να σου απαντήσει πάνω σε c++, αλλά κάποια πράγματα όπως inheritance είναι πάνω κάτω τα ίδια σε κάθε γλώσσα. Από τον κώδικα σου φαίνεται ότι έχεις κληρονομικότητα και κάνεις override τη function printRenter(). Απ' ότι είδα στα γρήγορα, στη c++ χρησιμοποιείς το keyword virtual για να κάνεις override μια function στη sub-class. Υποθέτω λοιπόν ότι από τη στιγμή που δε θα έχεις κάποια κλάση να κληρονομεί την Tcustomer δε χρειάζεται να δηλώσεις την printRender σαν virtual. Αν όμως έχεις την F_Customer που κληρονομεί την Τcustomer και υλοποιεί τη printRenter τότε θα πρέπει να τη δηλώσεις ως virtual.

3ον Αν όντως ισχύει αυτό που έγραψα για το virtual και το overide, τότε θα σου πω μόνο ότι είναι κακή ιδέα να κάνεις override τον constructor.

 

 

Καλύτερα να γράψεις την ερώτησή σου σε διαφορετικό topic με τον κατάλληλο τίτλο, ούτως ώστε να πάρεις απαντήσεις από άτομα που γνωρίζουν τη γλώσσα (δεν είμαι καν σίγουρος αν ο κώδικας που δίνεις είναι c++, ή κάποια άλλη γλώσσα που επίσης δε γνωρίζω :-) )

Δημοσ.

x_maras

 

Σε ποια σχολή μαθαίνουν σχεδίαση αλλά όχι C++;

 

Η σχολή την οποία τελειώνω τώρα είναι το CS του Groningen με κατεύθυνση Software engineering and distributed systems. Παρόλο που δεν έκανα το Bachelor εδώ ξέρω ότι το c++ μάθημα (μόνο ένα) είναι επιλογής. Εδώ διδάσκουν περισσότερο προγραμματισμό και το τι γλώσσα θα χρησιμοποιήσεις είναι δικό σου θέμα.

Έχω τύχει σε ομάδα που γράψαμε Java, σε άλλη Python και τώρα γράφω την πτυχιακή μου για μία εταιρεία που έχει το λογισμικό της σε PHP και γράφω λίγο C και Lua λόγο της Redis.

 

Πιστεύω ότι μπορώ να μάθω και C++, αν ασχοληθώ, όπως έμαθα Python, PHP και Lua χωρίς να μου τις διδάξει κάποιος ,που σημαίνει ότι έκαναν καλή δουλειά στη σχολή μου, μαθαίνοντας μου προγραμματισμό.

Δημοσ.

Ερώτηση:

 

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

να δηλώσω στην Tcustomer κλάση , την void printRenter( void ) μέθοδο ώς virtual.

 

>
/**
*  Βase class
*/
class Trenter {

public:

virtual void printRenter(void){ cout << "I am renter"; };
};

/**
*  derived class
*/
class Tcustomer : public Trenter {

public:

virtual void printRenter( void ){ cout << "I am customer"; };
};


 

 

 

επίσης θα πρέπει constructor και destructor να οριστουν σαν virtual ;

 

Ειναι καπως. Ειτε βαλεις virtual ειτε οχι, ειναι σωστο. Το θεμα τι θελεις να πετυχεις.

με λιγα λογια, χωρις virtual θα καλεσεις την συνατηση απο το αντικειμενο στο οποιο εχεις κανει cast. Με virtual θα καλεσεις την συναρτηση απο το αντικειμενο το οποιο υπαρχει (αυτο που εχει γινει new ας πουμε)

px

χωρις virtual

>
Trenter *r = new Tcustomer();
Tcustomer *c= r;
r->print τυπωνει hi am renter
c->print τυπωνει hi am customer

 

με virtual

 

>
Trenter *r = new Tcustomer();
Tcustomer *c= r;
r->print τυπωνει hi am customer
c->print τυπωνει hi am customer

Ο constuctor δεν παιρνει virtual

Ο destructor παιρνει virtual (οταν η κλαση σου ειναι base τοτε ΠΑΝΤΑ θα μαρκαρεις τον destructor ως virtual)

Δημοσ.

Οκ!

 

Τωρα σχετικά με τα διάφορα patterns που χρησιμοποιουνται ηθελα να μάθω αν κατα την σχεδίαση μπορούμε να χρησιμοποιήσουμε ενα ή περισσότερα. Να συνδιαστούν για παράδειγμα στο ιδιο προγραμμα το factory με το singleton pattern...Εξαρτάται απο τις περιπτώσεις χρήσης κάτι τέτοιο ή εξ'αρχής αναλογα με το project λέμε οτι θα χρησιμοποιήσουμε το factory pattern;

Δημοσ.

Το factory είναι ένα πολύ βοηθητικό εργαλείο. Το singleton επίσης.

 

Το θέμα με τα design patterns είναι ότι πρέπει να καταλάβεις τι ανάγκες - προβλήματα λύνουν πριν τα χρησιμοποιήσεις επιτυχώς.

 

Sent from my iPhone using Insomnia

Δημοσ.

Μπορεί κάποιος να μου εξηγήσει το adapter pattern με ενα παραδειγματακι σε c++;

Με εχει σκάσει...

 

 

Δες εδώ, έχει παραδείγματα σε αρκετές γλώσσες και για πολλά design patterns

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

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

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

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

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

Σύνδεση

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

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