![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Инкапсуляция [D7, XP]
John Doe © (2005-11-08 16:50:00)Здраствуйте.
Вот код:
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 18:05:00) [1]
> А если мне надо,чтоб никто не видел поля TCar,независимо
> от модуля,в котором этот класс
Это надо версию Delphi 2005, там в языке появился модификатор strict, который и делает то, что тебе надо.
Для того, чтобы решить проблему в ранних версиях, достаточно просто вынести объявления классов в отдельный модуль.
Digitman (2005-11-08 17:11:00) [2]
> John Doe © (08.11.05 17:07) [5]
да и логика тоже страдает)
поле Model, по всей очевидности должно быть объявлено отнюдь не в TMitsubishi, а в некоем TBrandnameCar, который, в свою очередь, будет прямым или непрямым наследником TCar... а уж TMitsubishi будет прямым или непрямым наследником TBrandnameCar
John Doe (2005-11-08 17:07:00) [3]
> вплоть до end.
:-)
Это я не в редакторе кода писал.
Ну что ж.
Спасибо всем.
Digitman (2005-11-08 17:04:00) [4]
> Кстати,а никто и не заметил ошибки
вплоть до end., который ты тоже, кстати, не написал, у тебя там м.б. еще туева хуча ошибок) ... но к сабжу они вряд ли имеют отношение
John Doe (2005-11-08 17:03:00) [5]
> Не давать дописывать код в свой модуль
В таком случае,придется создать специальный юнит для классов,интерфейсов итд. итп.
PS.Кстати,а никто и не заметил ошибки.
Я не создал обьект.
NewCar:=TMitsubishi.Create;
:-)
Внук (2005-11-08 16:53:00) [6]Не давать дописывать код в свой модуль :)
Digitman (2005-11-08 16:53:00) [7]
> Доступ он давать не должен,вроде
доступ к private-членам класса имеет любой , кто находится в ТОМ же юните, что и тот самый класс