Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.27;
Скачать: CL | DM;

Вниз

Инкапсуляция   Найти похожие ветки 

 
John Doe ©   (2005-11-08 16:50) [0]

Здраствуйте.
Вот код:

type
 TCar = class(TObject)
   private
     Acceleration: Word;
     Speed:        Word;
     Grip:         Word;
     Durability:   Word;
 end;

 TMitsubishi = class(TCar)
 protected
   Model: Word ;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var NewCar: TMitsubishi;
begin
 NewCar.Acceleration:=4;
end;


Не пойму.
Я имею возможность изменить значение поля Acceleration,через обьект-потомок класса.
Но в то же время,ведь обьявил поля класса TCar,в разделе [B]private[/B],а не protected.
Доступ он давать не должен,вроде...

Читаю М.В.Сухарев,"Основы Delphi-Профессиональный подход":
...."целостность данных не может быть на-
рушена вызывающими подпрограммами, [B]если только они не находятся в
одном модуле с описываемым классом[/B], то есть, в данном"...
А если мне надо,чтоб никто не видел поля TCar,независимо от модуля,в котором этот класс

описан.Что тогда делать.
Заранее спасибо.


 
Внук ©   (2005-11-08 16:53) [1]

Не давать дописывать код в свой модуль :)


 
Digitman ©   (2005-11-08 16:53) [2]


> Доступ он давать не должен,вроде


доступ к private-членам класса имеет любой , кто находится в ТОМ же юните, что и тот самый класс


 
John Doe ©   (2005-11-08 17:03) [3]


> Не давать дописывать код в свой модуль

В таком случае,придется создать специальный юнит для классов,интерфейсов итд. итп.

PS.Кстати,а никто и не заметил ошибки.
Я не создал обьект.
NewCar:=TMitsubishi.Create;
:-)


 
Digitman ©   (2005-11-08 17:04) [4]


> Кстати,а никто и не заметил ошибки


вплоть до end., который ты тоже, кстати, не написал, у тебя там м.б. еще туева хуча ошибок) ... но к сабжу они вряд ли имеют отношение


 
John Doe ©   (2005-11-08 17:07) [5]


> вплоть до end.

:-)
Это я не в редакторе кода писал.

Ну что ж.
Спасибо всем.


 
Digitman ©   (2005-11-08 17:11) [6]


> John Doe ©   (08.11.05 17:07) [5]


да и логика тоже страдает)

поле Model, по всей очевидности должно быть объявлено отнюдь не в TMitsubishi, а в некоем TBrandnameCar, который, в свою очередь, будет прямым или непрямым наследником TCar... а уж TMitsubishi будет прямым или непрямым наследником TBrandnameCar


 
Игорь Шевченко ©   (2005-11-08 18:05) [7]


> А если мне надо,чтоб никто не видел поля TCar,независимо
> от модуля,в котором этот класс


Это надо версию Delphi 2005, там в языке появился модификатор strict, который и делает то, что тебе надо.

Для того, чтобы решить проблему в ранних версиях, достаточно просто вынести объявления классов в отдельный модуль.



Страницы: 1 вся ветка

Текущий архив: 2005.11.27;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.036 c
2-1130948667
serg128
2005-11-02 19:24
2005.11.27
Правильное округление числа


2-1131802641
Fr3nch
2005-11-12 16:37
2005.11.27
Обращение к динамически созданной метке


14-1130784129
X9
2005-10-31 21:42
2005.11.27
Ищу алгоритм разбора


2-1131692511
Oni
2005-11-11 10:01
2005.11.27
Что такое framework (терминералогический вопрос)?


1-1130788940
Grol
2005-10-31 23:02
2005.11.27
Как ликвидировать выделенную память под компонент.