Στο παράδειγμα εδώ (και στις δυο γλώσσες, Ελληνικά και Αγγλικά), χρησιμοποιούμε δυο διαφορετικά αντικείμενα το Αριθ και το Προσθ που έχουν ένα κοινό αντικείμενο το Μια_Τιμή ως βάση. Ουσιαστικά τα Αριθ και Προσθ είναι συναρτήσεις που γυρνάνε ένα αντικείμενο Μια_Τιμή.
Ο κώδικας είναι πολύ απλός, διότι η Μ2000 δεν κοιτάει από την αρχή αν το αντικείμενο που θα περάσουμε έχει την ιδιότητα η_τιμή. Αν δεν την έχει θα βγει λάθος! Σε γλώσσες όπως η C++ αυτό δεν επιτρέπεται. Πρέπει δηλαδή να έχει διευκρινιστεί στην ετοιμασία του εκτελέσιμου αρχείου, αν γίνεται αυτό που ζητάμε.
Κλάση Γενική Μια_Τιμή {
η_τιμή=0
}
Συνάρτηση Αριθ {
Α=Μια_Τιμή()
Διάβασε Α.η_τιμή
=Α
}
Συνάρτηση Προσθ {
Α=Μια_Τιμή()
Διάβασε Β,Γ
Α.η_τιμή=Β.η_τιμή+Γ.η_τιμή
=Α
}
Α=Αριθ(3.14)
Β=Αριθ(2.72)
Γ=Αριθ(1.00)
Προσθ_ΑΒ=Προσθ(Α,Β)
Προσθ=Προσθ(Προσθ_ΑΒ, Γ)
Τύπωσε Προσθ.η_τιμή
Με αναφορά
Κλάση Γενική Μια_Τιμή {
η_τιμή=0
}
Συνάρτηση Αριθ {
Α=Μια_Τιμή()
Διάβασε Α.η_τιμή
=Α
}
Συνάρτηση Προσθ {
Α=Μια_Τιμή()
Διάβασε &Β,&Γ
Α.η_τιμή=Β.η_τιμή+Γ.η_τιμή
=Α
}
Α=Αριθ(3.14)
Β=Αριθ(2.72)
Γ=Αριθ(1.00)
Προσθ_ΑΒ=Προσθ(&Α,&Β)
Προσθ=Προσθ(&Προσθ_ΑΒ, &Γ)
Τύπωσε Προσθ.η_τιμή
Στα αγγλικά:
Class Global Expression {
value=0
}
Function Num {
A=Expression()
Read A.value
=A
}
Function Sum {
A=Expression()
Read B,C
A.value=B.value+C.value
=A
}
A=Num(3.14)
B=Num(2.72)
C=Num(1.00)
SUM_AB=Sum(A,B)
SUM=sum(SUM_AB, C)
Print SUM.value
Με αναφορά στην Sum
Class Global Expression {
value=0
}
Function Num {
A=Expression()
Read A.value
=A
}
Function Sum {
A=Expression()
Read &B,&C
A.value=B.value+C.value
=A
}
A=Num(3.14)
B=Num(2.72)
C=Num(1.00)
SUM_AB=Sum(&A,&B)
SUM=sum(&SUM_AB, &C)
Print SUM.value
Δείτε εδώ πώς γράφεται το πρόγραμμα που έχει την ίδια έξοδο (το ίδιο νούμερο δηλαδή), σε C++, με χρήση Virtual Method. (το έχω αντιγράψει εδώ...μήπως και σβηστεί από την αρχική θέση)
Σε C++
Ο κώδικας είναι πολύ απλός, διότι η Μ2000 δεν κοιτάει από την αρχή αν το αντικείμενο που θα περάσουμε έχει την ιδιότητα η_τιμή. Αν δεν την έχει θα βγει λάθος! Σε γλώσσες όπως η C++ αυτό δεν επιτρέπεται. Πρέπει δηλαδή να έχει διευκρινιστεί στην ετοιμασία του εκτελέσιμου αρχείου, αν γίνεται αυτό που ζητάμε.
Κλάση Γενική Μια_Τιμή {
η_τιμή=0
}
Συνάρτηση Αριθ {
Α=Μια_Τιμή()
Διάβασε Α.η_τιμή
=Α
}
Συνάρτηση Προσθ {
Α=Μια_Τιμή()
Διάβασε Β,Γ
Α.η_τιμή=Β.η_τιμή+Γ.η_τιμή
=Α
}
Α=Αριθ(3.14)
Β=Αριθ(2.72)
Γ=Αριθ(1.00)
Προσθ_ΑΒ=Προσθ(Α,Β)
Προσθ=Προσθ(Προσθ_ΑΒ, Γ)
Τύπωσε Προσθ.η_τιμή
Με αναφορά
Κλάση Γενική Μια_Τιμή {
η_τιμή=0
}
Συνάρτηση Αριθ {
Α=Μια_Τιμή()
Διάβασε Α.η_τιμή
=Α
}
Συνάρτηση Προσθ {
Α=Μια_Τιμή()
Διάβασε &Β,&Γ
Α.η_τιμή=Β.η_τιμή+Γ.η_τιμή
=Α
}
Α=Αριθ(3.14)
Β=Αριθ(2.72)
Γ=Αριθ(1.00)
Προσθ_ΑΒ=Προσθ(&Α,&Β)
Προσθ=Προσθ(&Προσθ_ΑΒ, &Γ)
Τύπωσε Προσθ.η_τιμή
Στα αγγλικά:
Class Global Expression {
value=0
}
Function Num {
A=Expression()
Read A.value
=A
}
Function Sum {
A=Expression()
Read B,C
A.value=B.value+C.value
=A
}
A=Num(3.14)
B=Num(2.72)
C=Num(1.00)
SUM_AB=Sum(A,B)
SUM=sum(SUM_AB, C)
Print SUM.value
Με αναφορά στην Sum
Class Global Expression {
value=0
}
Function Num {
A=Expression()
Read A.value
=A
}
Function Sum {
A=Expression()
Read &B,&C
A.value=B.value+C.value
=A
}
A=Num(3.14)
B=Num(2.72)
C=Num(1.00)
SUM_AB=Sum(&A,&B)
SUM=sum(&SUM_AB, &C)
Print SUM.value
Δείτε εδώ πώς γράφεται το πρόγραμμα που έχει την ίδια έξοδο (το ίδιο νούμερο δηλαδή), σε C++, με χρήση Virtual Method. (το έχω αντιγράψει εδώ...μήπως και σβηστεί από την αρχική θέση)
Σε C++
#include <iostream>
using namespace std;
class Expression
{
public:
virtual
auto value() const -> double
= 0;
};
class Number
: public Expression
{
private:
double number_;
public:
auto value() const -> double
override
{ return number_; }
Number( double const number )
: Expression()
, number_( number )
{}
};
class Sum
: public Expression
{
private:
Expression const* a_;
Expression const* b_;
public:
auto value() const -> double
override
{ return a_->value() + b_->value(); } // Dynamic binding, OK!
Sum( Expression const* const a, Expression const* const b )
: Expression()
, a_( a )
, b_( b )
{}
};
auto main() -> int
{
Number const a( 3.14 );
Number const b( 2.72 );
Number const c( 1.0 );
Sum const sum_ab( &a, &b );
Sum const sum( &sum_ab, &c );
cout << sum.value() << endl;
}
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου
You can feel free to write any suggestion, or idea on the subject.