![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Одно из преимуществ объектно-ориентированного программирования - скрытность полей, невозможность модифицировать их некорректным образом. Ниже я сделал объект для массива вещественных чисел со "всеми" удобствами подобно TStrings. Но возникает следующая проблема: мне иногда нужно получить ссылку на массив например при использовании MaxValue(arr : array of double), имеющуюся в Math модуле, а также во многих других случаях. Как это сделать? Через property? И как на счет того, что получив ссылку на этот массив я могу его случайно изменить (например изменить его размер) и тогда скрытность полей окажется фиктивной?
Это сообщение отредактировал(а) Traum - 19.8.2007, 10:21 |
|||
|
||||
| Демо |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 3.11.2005 Репутация: 7 Всего: 50 |
Стандартным приемом.
-------------------- |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
Так сделай метод в классе maxValue, который будет сам работать с приватным полем -------------------- There are always someone smarter than you... |
|||
|
||||
| pseud |
|
|||
![]() Экспёрт Тыдыщ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1175 Регистрация: 18.5.2007 Где: Минск, Беларусь Репутация: 10 Всего: 40 |
MetalFan,
поддерживаю
-------------------- Испытание чужого терпения можно считать успешным, если оно лопнуло... |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
-------------------- There are always someone smarter than you... |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 7 Всего: 38 |
Ну каждую функцию дублировать не будешь же... Правильнее, как показал Демо. Кстати, в VCL, такое тоже используется. Например TList. -------------------- ![]() |
|||
|
||||
| MetalFan |
|
||||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
зачем каждую? только необходимые! согласись, удобнее и понятнее писать так:
чем
на то оно и ООП, чтобы объект инкапсулировал в себе другие объекты и данные и предоставлял методы для доступа к внутренним данным... а если объект будет "наружу" отдавать все свои данные для внешней обработки, то на кой он нужен тогда? Это сообщение отредактировал(а) MetalFan - 20.8.2007, 16:22 -------------------- There are always someone smarter than you... |
||||
|
|||||
| aktuba |
|
||||||||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 7 Всего: 38 |
Удобнее, но иногда все-таки нужен выход наружу...
А еще есть делегирование и много других умных слов
-------------------- ![]() |
||||||||
|
|||||||||
| Traum |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 30.1.2004 Репутация: нет Всего: нет |
Чем это по сути отличается от того, если бы я просто расположил переменную fVals : TArrayDouble в разряд public? |
|||
|
||||
| aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 7 Всего: 38 |
Тем, что если ты расположишь переменную в public, то ее можно будет изменять, а если сделать проперти - то, в данном случае, нет. -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |