![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| maxzone |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 15.8.2006 Репутация: нет Всего: нет |
Очень жалко, что я не успел во время к этой (и более ранней аналогичной теме ) теме.
Очень понравилось сравнение себя как класса, стоящего в супермарке в очереди к кассиру: Не дело это - самому кассиру залазит в мой кошелек и вычитать из того, что он там нашел Он просто должен сказать: "С вас столько-то!" (object.Pay(X dollars)) 2-ой вариант, действительно, отражает характер ООП. А вдруг у меня денег не хватит, тогда (во 2-ом случае, когда данные не выствленны наружу) я могу ну, например, делегировать оплату стоящему с зади меня другу с большим кошельком Пофантазируем еще, во мне, как в классе, а точнее в моем кошелке, появляется новое поле - КРЕДИТКА! (не являющейся наличкой как бы) Что мы делаем в 1-ом случае? Правильно, вводим гетеры/сеттеры для нового поля. А кассир что? Правильно. Теперь он лезет ко мне в карман считает деньги, принимает решение, что денег не хватает, смотрит что есть кридитка и т.д. (В прочем, вариант с делегированием другу опять может остаться в стороне) А во 2-ом случае? Да н_и_ч_е_г_о. Данные скрыты(Свойств, если вам так удобнее, нет). Это мое внутреннее дело, как я буду оплачивать Конечно, можно сказать, что это пример надуманного ООП, и геттеры/сеттеры здесь притянуты за уши (гм, разве?), но лучше я посоветую прочитать ответ на поставленный здесь вопрос, почему get/set не есть хорошо в книжке (C++ Gotchas: Avoiding Common Problems in Coding and Design by Stephen C. Dewhurst ) Она представляет из себя сборник из 100 наиболее распространненых ловушек, куда попадают программисты на с++ (по моему Gotcha N67, но могу и ошибаться). Не буду гнуть пальцы и кричать, как? вы не знаете кто такой Дьюхарст.. Просто советую. Тем более, что эта книга уже переведена на русский язык... |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Предлагаю посмотреть с другой стороны.
С++ нужен для работы программерского коллектива. Отсюда и большинство требований. Так что не парьтесь. Есть дядька, который будет вам расписывать задание на класс. Ваше дело будет выдать ему код в конце рабочего дня. Дальше код пойдет к другому программисту, который не особо будет вникать в вашу начинку. Он воспользуется вашим классом и его методами. Отсюда и требования, чтобы было поменьше дыр, которые дадут вашему коллеге воспользоваться незадокументированной вами возможностью и чего-то там навернуть лишка в данных. Сами вы можете писать на чем угодно. На асме или на сях. В одиночку большую программу не поднять, так что вы можете для себя прописывать даже просто структуры вместо классов. С++ конечно облегчил жизнь в "одиночном программировании", но, иной раз вы залазите в конкретную тину, о которой вам даже думать не надо. И мне тоже. Кстати, С++ тоже не идеал... как показала жизнь. И даже проблема не в наследстве сей. В один момент процесс пухнет. И где там при наследовании классов лишнее сработает не туда.. Рассказать, как я три дня просто у себя искал тупую ошибку в for() и не мог ее увидеть? Просто не верил, что она может быть именно там. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
P.S. akizelokro, ИМХО, ты прав, но не надо было разжигать спор опять |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
к счастью не все работают кодерами, а некоторые всё-таки программисты и и более "думающие спецы", поэтому не всегда кто-то водит тебя за руку. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Тогда ты сам должен понимать, что не всем правилам нужно следовать в 100% случаев. Они, правила, гораздо интереснее своими исключениями. А тогда окажется, что и какой-то get/set будет гораздо более по теме. А в общем, приведенном в теме смысле, думающие спецы давно бы привели конкретный пример, когда постоянное использование get/set осложнило бы работу при наследовании классов, когда делают дело разные программисты. Эхмы, мой неконкретный опыт мне только подтверждает постоянную сферу действия законов паркинсона и др. и др. Если полазить раньше по этой теме, то можно было найти вопрос о том, что любой класс нуждается в функции GetOccupied. Это, на мой взгляд, неправильно. Для этого пишется общий предок (либо виртуальный класс, либо класс с виртуальным методом,- четыре года ничего не писал, пошел Страуструпа чтить и искать различия между первоначальным стандартом и практической реализацией стандарта). -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |