Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠ° ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: конспСкт Π»Π΅ΠΊΡ†ΠΈΠΉΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 14

Автор А. Π¦Π²Π΅Ρ‚ΠΊΠΎΠ²Π°

OvertimeFactor =1.5; {ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ ΠΎΠΏΠ»Π°Ρ‚Ρ‹}

type

TEmployee = object

Name, Title: string[25];

Rate: Real;

procedure Init (AName, ATitle: string; ARate: Real);

function GetName : String;

function GetTitle : String;

function GetRate : Real;

function GetPayAmount : Real;

end;

THourly = object(TEmployee)

Time: Integer;

procedure Init(AName, ATitle: string; ARate:

Real, Atime: Integer);

function GetPayAmount : Real;

function GetTime : Real;

end;

TSalaried = object(TEmployee)

function GetPayAmount : Real;

end;

TCommissioned = object(TSalaried)

Commission : Real;

SalesAmount : Real;

constructor Init (AName, ATitle: String; ARate,

ACommission, ASalesAmount: Real);

function GetPayAmount : Real;

end;

implementation

function RoundPay(Wages: Real) : Real;

{округляСм сумму Π²Ρ‹ΠΏΠ»Π°Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ суммы мСньшС

Π΄Π΅Π½Π΅ΠΆΠ½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹}

begin

RoundPay := Trunc(Wages * 100) / 100;

.

.

.

TEmployee являСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ нашСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ содСрТит ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetPayAmount.

function TEmployee.GetPayAmount : Real;

begin

RunError(211); { Π΄Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ этапа выполнСния }

end;

ΠœΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния. Если вызываСтся Employee.GetPayAmount, Ρ‚ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? ΠŸΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ TEmployee являСтся Π²Π΅Ρ€ΡˆΠΈΠ½ΠΎΠΉ нашСй ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π½Π΅ опрСдСляСт Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ; ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² TEmployee Π½Π΅ вызываСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, хотя ΠΎΠ½ΠΈ ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ наслСдованными. ВсС наши Ρ€Π°Π±ΠΎΡ‚Π½ΠΈΠΊΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈΠ±ΠΎ почасовиками, Π»ΠΈΠ±ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠΊΠ»Π°Π΄Ρ‹, Π»ΠΈΠ±ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π° ΡΠ΄Π΅Π»ΡŒΡ‰ΠΈΠ½Π΅. Ошибка Π½Π° этапС выполнСния ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ 211, Ρ‡Ρ‚ΠΎ соотвСтствуСт ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ ΠΎΠ± ошибкС, связанной с Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ абстрактного ΠΌΠ΅Ρ‚ΠΎΠ΄Π° (Ссли ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎ ошибкС Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ TEmployee.GetPayAmount).

НиТС приводится ΠΌΠ΅Ρ‚ΠΎΠ΄ THourly.GetPayAmount, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‰ΠΈ, ΠΊΠ°ΠΊ свСрхурочная ΠΎΠΏΠ»Π°Ρ‚Π°, число ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… часов ΠΈ Ρ‚. Π΄.

function THourly.GetPayAMount : Real;

var

OverTime: Integer;

begin

Overtime := Time – OvertimeThreshold;

if Overtime > 0 then

GetPayAmount := RoundPay(OvertimeThreshold * Rate +

Rate OverTime * OvertimeFactor * Rate)

else

GetPayAmount := RoundPay(Time * Rate)

end;

ΠœΠ΅Ρ‚ΠΎΠ΄ TSalaried.GetPayAmount Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅; Π² Π½Π΅ΠΌ ставка

дСлится Π½Π° число Π²Ρ‹ΠΏΠ»Π°Ρ‚:

function TSalaried.GetPayAmount : Real;

begin

GetPayAmount := RoundPay(Rate / PayPeriods);

end;

Если Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ TCommissioned.GetPayAmount, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ TSalaried.GetPayAmount, вычисляСт комиссионныС ΠΈ прибавляСт ΠΈΡ… ΠΊ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ TSalaried. GetPayAmount.

function TΠ‘ommissioned.GetPayAmount : Real;

begin

GetPayAmount := RoundPay(TSalaried.GetPayAmount +

Commission * SalesAmount);

end;

Π’Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: хотя ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, поля Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π±Ρ‹Π»ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ Ρ‚ΠΈΠΏ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² точности с Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ.

3. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

НаслСдованиС Π΄ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ стСпСни измСняСт ΠΏΡ€Π°Π²ΠΈΠ»Π° совмСстимости Ρ‚ΠΈΠΏΠΎΠ² Π² Borland Pascal. Помимо всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ наслСдуСт ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² всСх своих ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².

Π­Ρ‚Π° Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ„ΠΎΡ€ΠΌΡ‹:

1) ΠΌΠ΅ΠΆΠ΄Ρƒ рСализациями ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²;

2) ΠΌΠ΅ΠΆΠ΄Ρƒ указатСлями Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²;

3) ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ фактичСскими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ.

Однако ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎ всСх Ρ‚Ρ€Π΅Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ… ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΊ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ свободно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ вмСсто Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΡ…, Π½ΠΎ Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

НапримСр, TSalaried являСтся ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ TEmployee, Π° ВБош-missioned – ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠΌ TSalaried. Помня ΠΎΠ± этом, рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ описания:

tyΡ€e

PEmΡ€loyee = ^TEmployee;

PSalaried = ^TSalaried;

PCommissioned = ^TCommissioned;

var

AnEmΡ€loyee: TEmployee;

ASalaried: TSalaried;

PCommissioned: TCommissioned;

TEmployeePtr: PEmΡ€loyee;

TSalariedPtr: PSalaried;

TCommissionedPtr: PCommissioned;

ΠŸΡ€ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… описаниях справСдливы ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

присваивания:

AnEmΡ€loyee :=ASalaried;

ASalaried := ACommissioned;

TCommissionedPtr := ACommissioned;

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ экзСмпляр любого ΠΈΠ· Π΅Π³ΠΎ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ². ΠžΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ присваивания нСдопустимы.

Π­Ρ‚Π° концСпция являСтся Π½ΠΎΠ²ΠΎΠΉ для Pascal, ΠΈ Π²Π½Π°Ρ‡Π°Π»Π΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠ²Π°Ρ‚ΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ порядкС слСдуСт ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ². НСобходимо Π΄ΡƒΠΌΠ°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: источник Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² состоянии ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ. ΠŸΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ содСрТат всС, Ρ‡Ρ‚ΠΎ содСрТат ΠΈΡ… ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ благодаря свойству наслСдования. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈΠ±ΠΎ Π² точности Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€, Π»ΠΈΠ±ΠΎ (Ρ‡Ρ‚ΠΎ Ρ‡Π°Ρ‰Π΅ всСго ΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚) ΠΎΠ½ большС своСго родитСля, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±Ρ‹Π²Π°Π΅Ρ‚ мСньшС. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ (Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΌΡƒ (Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅ΠΌΡƒ) ΠΌΠΎΠ³Π»ΠΎ Π±Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ поля ΠΏΠΎΡ€ΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ, Ρ‡Ρ‚ΠΎ опасно ΠΈ поэтому нСдопустимо.

Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°Ρ… присваивания ΠΈΠ· источника Π² ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π±ΡƒΠ΄ΡƒΡ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ поля, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для ΠΎΠ±ΠΎΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Π’ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ присваивания:

AnEmployee:= ACommissioned;

Волько поля Name, Title ΠΈ Rate ΠΈΠ· ACommissioned Π±ΡƒΠ΄ΡƒΡ‚ скопированы Π² AnEmployee, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эти поля ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ для TCommissioned ΠΈ TEmployee. Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ указатСлями Π½Π° Ρ‚ΠΈΠΏΡ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ подчиняСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΎΠ±Ρ‰ΠΈΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ присвоСн ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° родитСля. Если Π΄Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ опрСдСлСния, Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ присваивания ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ допустимыми:

TSalariedPtr:= TCommissionedPtr;

TEmployeePtr:= TSalariedPtr;

TEmployeePtr:= PCommissionedPtr;

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ присваивания нСдопустимы!

Π€ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-пСрСмСнная) Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π² качСствС фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ своСго ΠΆΠ΅ Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ всСх Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ². Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

procedure CalcFedTax(Victim: TSalaried);

Ρ‚ΠΎ допустимыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ TSalaried ΠΈΠ»ΠΈ TCommissioned, Π½ΠΎ Π½Π΅ Ρ‚ΠΈΠΏ TEmployee. Victim Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈ этом Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° совмСстимости.


Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ-значСниями ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π΅ΡΡ‚ΡŒ ΠΊΠΎΡ€Π΅Π½Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, ΠΏΠΎΡΡŒΡˆΠ°Π΅ΠΌΡ‹ΠΉ Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-пСрСмСнная являСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΏΠΈΠ΅ΠΉ фактичСского ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, эта копия Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ входят Π² Ρ‚ΠΈΠΏ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°-значСния. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π±ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ прСобразуСтся ΠΊ Ρ‚ΠΈΠΏΡƒ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€-пСрСмСнная большС Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΠ±Ρ€Π°Π·Ρ†Ρƒ, Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ остаСтся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ.

Аналогично, Ссли Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, фактичСский ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° этот Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈΠ»ΠΈ Π½Π° любой Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ Ρ‚ΠΈΠΏ. ΠŸΡƒΡΡ‚ΡŒ Π΄Π°Π½ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹:

procedure Worker.Add (AWorker: PSalaried);

Π’ΠΎΠ³Π΄Π° допустимыми Ρ‚ΠΈΠΏΠ°ΠΌΠΈ фактичСских ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ PSalaried ΠΈΠ»ΠΈ PCommissioned, Π½ΠΎ Π½Π΅ Ρ‚ΠΈΠΏ PEmployee.

Π›Π•ΠšΠ¦Π˜Π― β„– 14. АссСмблСр

1. ΠžΠ± ассСмблСрС

Когда-Ρ‚ΠΎ ассСмблСр Π±Ρ‹Π» языком, Π±Π΅Π· знания ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ нСльзя Π±Ρ‹Π»ΠΎ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅. ΠŸΠΎΡΡ‚Π΅ΠΏΠ΅Π½Π½ΠΎ ситуация мСнялась. Появлялись Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ срСдства общСния с ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ. Но Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков ассСмблСр Π½Π΅ ΡƒΠΌΠΈΡ€Π°Π», Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ½ Π½Π΅ ΠΌΠΎΠ³ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ этого Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? Π’ поисках ΠΎΡ‚Π²Π΅Ρ‚Π° попытаСмся ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ язык ассСмблСра Π²ΠΎΠΎΠ±Ρ‰Π΅.

Если ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎ, Ρ‚ΠΎ язык ассСмблСра – это символичСскоС прСдставлСниС машинного языка. ВсС процСссы Π² машинС Π½Π° самом Π½ΠΈΠ·ΠΊΠΎΠΌ, Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ приводятся Π² дСйствиС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ (инструкциями) машинного языка. ΠžΡ‚ΡΡŽΠ΄Π° понятно, Ρ‡Ρ‚ΠΎ, нСсмотря Π½Π° ΠΎΠ±Ρ‰Π΅Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, язык ассСмблСра для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° свой. Π­Ρ‚ΠΎ касаСтся ΠΈ внСшнСго Π²ΠΈΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° ассСмблСрС, ΠΈ ΠΈΠ΄Π΅ΠΉ, ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… этот язык являСтся.

По-настоящСму Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанныС с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€ΠΎΠΉ (ΠΈΠ»ΠΈ, Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, зависящиС ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, ΠΊΠ°ΠΊ, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ быстродСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹), Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π±Π΅Π· знания ассСмблСра.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ высокоуровнСвыС срСдства Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ построСния Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΈΡ€ΠΎΠ² ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ выполняСт Π½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ языка, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ написана Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° ΠΈΡ… трансформированноС прСдставлСниС Π² Ρ„ΠΎΡ€ΠΌΠ΅ скучной ΠΈ ΡƒΠ½Ρ‹Π»ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ совсСм Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ языка – машинного. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ прСдставим, Ρ‡Ρ‚ΠΎ Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° нСстандартная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ устройством ΠΈΠ»ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ знания ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°. Каким Π±Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ Π½ΠΈ Π±Ρ‹Π» язык, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ программист написал свою ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π±Π΅Π· знания ассСмблСра Π΅ΠΌΡƒ Π½Π΅ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ. И Π½Π΅ случайно практичСски всС компиляторы языков высокого уровня содСрТат срСдства связи своих ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с модулями Π½Π° ассСмблСрС Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄ Π½Π° ассСмблСрный ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ программирования.

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ составлСн ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… физичСских устройств, ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π»ΠΎΠΊΡƒ, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΌΡƒ систСмным. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, посмотрим Π½Π° ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ схСму Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° (рис. 1). Она Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Π½Π΄ΡƒΠ΅Ρ‚ Π½Π° Π±Π΅Π·ΡƒΡΠ»ΠΎΠ²Π½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ†Π΅Π»ΡŒΡŽ лишь ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, взаимосвязь ΠΈ Ρ‚ΠΈΠΏΠΎΠ²ΠΎΠΉ состав элСмСнтов соврСмСнного ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°.