Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
14-1131012564
Bazi
2005-11-03 13:09
2005.11.27
Какие ограничения накладывает каждая версия Делфи?


4-1127462761
Still Swamp
2005-09-23 12:06
2005.11.27
Уходит фокус после keybd_event VK_RIGHT


14-1131316468
Mirror
2005-11-07 01:34
2005.11.27
Подскажите компонент


2-1131619743
oleg_v
2005-11-10 13:49
2005.11.27
WebBrowser


2-1131355369
Robbins
2005-11-07 12:22
2005.11.27
Ошибка в ShellExecute.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский