. ᒺ, , ᒺ 볺 ᒺ. 볺 () , () . ͳ - []. , , .
:
ᒺ, ; , .
: ᒺ, . ᒺ, . , .
ᒺ- : . ᒺ, ᒺ . ᒺ.
. . , , . 䳿. 볺 , , . :
//
enum Boolean {FALSE, TRUE};
class Heater {
public:
Heater(Location);
~ Heater();
void turnOn();
void turnOff();
Boolean isOn() const;
private:
...
};
public , ᒺ.
, - , , :
class SerialPort {
public:
SerialPort(Location);
~ SerialPort();
void write(char*);
void write(int);
static SerialPort port[10];
private:
...
};
Heater :
class Heater {
public:
...
protected:
const Location repLocation;
Boolean repIsOn;
SerialPort* repPort;
};
repLocation, repIsOn, repPort ᒺ. ᒺ ( ).
|
|
( -) :
Heater :: Heater(Location loc): repLocation (loc),
repIsOn(FALSE),
repPort(&SerialPort::ports(1))
{ }
:
Heater :: Heater() { }
void Heater :: turnOn()
{
if (!repIsOn) {
repPort->write(*);
repPort->write(repLocation);
repPort->write(1);
repIsOn = TRUE;
}
}
void Heater :: turnOff()
{
if (repIsOn) {
repPort->write(*);
repPort->write(repLocation);
repPort->write(0);
repIsOn = FALSE;
}
}
Boolean Heater :: isOn() const { return repIsOn; }
, ( , , .), , .
. : , , . , . .
, . . ().
send PrimeData:
Void PrimeData::send(){
//
//
{;
void FullData::Send {
PrimeData::Send();
//
//
};
ᒺ
PrimeData prime;
FullData full (12);
Void SendData (PrimeData &D) {D.Send();}:
:
SendData (Prime);
SendData (full);
, . ? SendData D.Send(), . .
, ( D) ᒺ , .
ᒺ - .
, . , . .
[]. ³ , , +, ( - overloading). ++ (, ), , . , , , .
|
|
: kind 0 PrimeData 1 FullData. switch(kind) .
case, .
. .
. , , , , .
push a1
push a2
jmp 1256
䳿 , . , , , ᒺ .
.
SmallTalk. ᒺ , , . ᒺ . ᒺ , . , . , . , .
, ᒺ ( ), ( 1,5 ).
?
++ , , (virtual), .
V- ( ). ᒺ. . , V- .
: ᒺ - .
, (inline). ( ) . ( ).
( - ) .
Borland C Borland Pascal.
|
class X: public Y
ᒺ Y X , ᒺ ᒺ Y Y. ?
, ++, Pascal ( , /).
, ( ) ( ).
|
|
, (), . () .
ᒺ- ᒺ.
ϳ , ( ) .
class TelemetryData {
public:
TelemetryData();
virtual ~TelemetryData();
virtual void transmit();
Time currentTime();
protected:
int id;
Time timeStamp;
};
class ElectricalData: public TelemetryData {
public:
ElectricalData(float v1, float v2, float a1, float a2);
virtual ~ ElectricalData();
virtual void transmit();
float currentPower() const;
protected:
float fuelCeill1Voltage, fuelCeill2Voltage;
float fuelCeill1Amperes, fuelCeill2Amperes;
};
, . ++ . .
void TelemetryData::transmit()
{
// id
// timeStamp
}
void ElectricalData::transmit()
{
TelemetryData::transmit();
//
//
}
++ (). (Smalltalk, Java) .
. Smalltalk . ++, , virtual, .
. . . ++. ᒺ .
void transmitFreshData(TelemetryData & d, const Time & t)
{
if (d. currentTime() >= t) d. transmit();
}
, . . ++ , .
. ᒺ- . ++ , . . ᒺ this. () .
++ .
TelemetryData telemetry;
ElectricalData electrical;
telemetry = electrical;
, , ( -) . , telemetry electrical.
. , , , .
|
|
( ) .
. , (Smalltalk, Eiffel). , (CLOS). ( ), () ++.
. , (Smalltalk, Eiffel). , (++). , (++).
. ++ . ᒺ, .
³ ᒺ . .
:
class TemperatureController {
public:
TemperatureController(Location);
~TemperatureController();
void process(const TemperatureRamp &);
Minute schedule(const TemperatureRamp &) const;
protected:
Heater h;
};
ᒺ Heater TemperatureController.
ᒺ- :
- , ;
- .
ᒺ . ᒺ ᒺ ( ) .
. , - , - /. , ᒺ ( ) .
, , .
.
C , , .
1. .
2. .
3. .
4. .
5. .
6. .
7. .
8. .
9. .
10. .
11. .
12. .
13. .