![]() |
|
Модераторы: Daevaorn Страницы: (7) Все « Первая ... 2 3 [4] 5 6 ... Последняя »
( Перейти к первому непрочитанному сообщению ) |
![]()
|
|
| likehood |
|
||||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
нет
Какая GUI библиотека является стандартом и что это за ряд причин? |
||||
|
|||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: нет Всего: 1 |
А еще вопрос можно?
как реализовать класс Vector с тремя полями x,y,z не используя доступ к данным? Или его существование будет ошибкой проектировки? |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Leksey, А чем этот Vector принципиально отличается от всего выше рассмотренного? Ничем, а значит и требования для него те же.
|
|||
|
||||
| Fazil6 |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
можно
напрягаешь голову, думаешь и реализовываешь
если он мне нахрен не надо в программе, то конечно это
|
||||||||
|
|||||||||
| UnrealMan |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Даже если речь идёт о классе-наследнике? Т.е. код вроде
это уже ошибка проектирования?
Странный код, однако :-) Начнём с того, что непонятна природа SomeData. Что будут с ней делать функции write производных от Write классов? Кроме того, что мы будем делать, если нам понадобится не просто «распечатать» какое-то одно поле, а ещё и какие-то операции осуществить (причём, возможно, с несколькими полями)? Или все данные класса нужно непременно сосредоточить в одном-единственном поле d типа SomeData, и это есть хорошо? Ну это вообще шедевр, заслуживащий наивысших похвал :-) |
||||||
|
|||||||
| Leksey |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 332 Регистрация: 12.12.2004 Репутация: нет Всего: 1 |
Fazil6 А что так грубо?
Я вроде привел пример очень простого класса и просто интересно было посмотреть как его реализовать.А то может я что не так сделаю... |
|||
|
||||
| Fazil6 |
|
||||||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
да. Это тоже самое, когда твои данные были бы просто protected Если DerivedClass оперирует данными, то почему эти данные находятся в другом классе. Данные класса - это деталь реализации, когда в наследовании принимают участия данные, то детали реализации становятся частью интерфейса, а это плохо.
никакого значения это не имеет. Это пример и это может быть все, что угодно. Не в этом смысл примера.
Вотм то и дело. Есть интерфейс и он определен
Классу по барабану, что вы будете делать с данными. Куда хотите, туда и выводите. Класс Сам решает какие данные он хочет вывести и передает их.
Опять пишем класс на на все случаи жизни? и что? Необходимость в доступе к данным == неправильный дизайн. Проектирование + виртуальные функции - вот инструмент решения проблем. Сколько еще раз повторить? Или Вы мне надеетесь доказать, что инкапсуляция куйня?
данные вне класса никому не нужны. Представьте себе функцию swap. Функция сидит себе и ничего не делает. Вдруг ее вызвали. Она получила 2 ссылки и поменяла их значения местами. Какое ей дело кто ее вызвал? Какое ей дело кто ей эти аргументы передал? По барабану что эти данные значат. Тоже самое происходит и снаружи этой функции. Когда кто-то вызывает функцию swap ему 100% до лампады как эта функция будет выполнять то, что от нее ждут. Она выдала результат и ауфидерзейн. Теперь представляем функцию, которая ходит за всеми и просит их дать ей 2 переменные и уж она их обработает. Бред. Почему по вашему с классами это не Бред? При хорошем проектировании вопросы, которыми вы пытаетесь меня победить не возникают вообще. UnrealMan,
а тут уж что тебя не устраивает? |
||||||||||||||
|
|||||||||||||||
| Fazil6 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
тебе показалось. Ну писать тебе класс я не буду просто пото потому, что понятия не имею, что за класс тебе нужен. Обратись в центр помощи, может там помогут. |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
Fazil6, в твоем первом примере с классом Write ты говорил, что нет необходимости давать доступ к внутренней структуре класса с помощью get/set? Если да, то твой пример ничего не объяснет, поскольку Write это абстракный класс, не содержащий никаких данных. Все данные передаются явно методу write, но откуда беруться эти данные? Если из другого класса, то здесь без get() не обойтись, а если это просто внешний объект, то причем здесь тогда инкапсуляция?
Может на более высоких уровнях абстракции и можно обойтись без get/set, то при реализации таких базовых классов как Point сложно обойтись без getX(), getY(), getZ(). Вообще, если класс представляет из себя некоторую структуру данных, то он далеко не всегда знает как эти данные обрабатывать. Тут одним наследованием и полиморфизмом не обойтись, предется открывать доступ к части данных. |
|||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Добавлено @ 14:36
давайте всетаки не путать структуры данных и классы. Point - это всетаки данные, которые логически сгруппированы для удобства использования, а не класс. В структурах данных как раз интерес представляют сами данные и это совершенно другой вопрос. |
||||
|
|||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
А как класс Write получит доступ к данным SomeData?
С помощью get/set или того хуже SomeData - это структура с открытыми данными? |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
baronp, не тут идея как раз в том, что для Write доступ к SomeData не нужен.
Наоборот SomeData использует Write и внутри себя подготваливает данные в том виде, в котором Write готов их принимать. Всё красиво в теории. Но "В теории нет разницы между теорией и практикой, на практике же она есть" (см. мою подпись). Никогда не поверю, что можно эффективно писать не интересуясь состоянием объекта до того, как потребовать от него действия. Вы же предпочтёте проверить сколько у вас денег в кошельке прежде, чем сделать дорогую покупку, а не говорить потом у кассы: "Ooops, an exception occured" Это сообщение отредактировал(а) Дрон - 12.7.2006, 15:53 -------------------- Да. Именно так. |
|||
|
||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
||||
|
||||
| Fazil6 |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1653 Регистрация: 3.5.2006 Где: Минск Репутация: 35 Всего: 60 |
Повторяю : это абстрактный пример. Не важно что такое SomeData. Считайте, что это int. Вы за деревьями леса не видите.
Я - класс , деньги - мои данные. Я проверяю и ничего в этом страшного нет. Это ведь в классе происходит. А вот когда на просьбу показать товар, продавец потребует показать сколько у меня есть денег... Никого не должны интересовать мои деньги кроме меня. |
||||
|
|||||
| likehood |
|
|||
|
666 ![]() ![]() Профиль Группа: Участник Сообщений: 536 Регистрация: 21.12.2005 Репутация: 8 Всего: 24 |
То есть класс, содержащий данные должен знать о классах, которые будут эти данные обрабатывать (точнее, не о самих классах, а о интерфейсе Write). Если это библиотечный класс, то имхо будет сложно учесть в нем все возможные способы работы с его данными.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |