У меня вопрос зачем нужны запреты protected и private в определениях классов в среде С++?Не могу понять логику зачем нужно что то запрещать?Приведите примерчик пожалуйста
У меня вопрос зачем нужны запреты protected и private в определениях классов в среде С++?Не могу понять логику зачем нужно что то запрещать?Приведите примерчик пожалуйста
Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.
18 февраля 2010 в 17:03
наверно находятся ценители, но ознакомиться с ними, так бегло прочитать, все же стоит: симула первой ввела ООП, смолтолк развил идеи.
Ну конечно более правильным будет изучение CLOS.
18 февраля 2010 в 17:03
RFC: Это если интересно "академическое" программирование, так покодить чего-нибудь для себя, для "промышленного" и не нужно на них заморачиваться
18 февраля 2010 в 17:02
Сейчас вообще кто-нибудь пишет под Simula\Smalltalk?)
18 февраля 2010 в 16:05
Для ANSI стандарта лиспа есть модель CLOS (Common Lisp Object System), примерно похожа на "чистые" ООП-языки вроде Simula или Smalltalk.
18 февраля 2010 в 16:04
Ну это классические определения (в духе Алана Кея). Теория полезная вещь .
Стоит заметить, что для различных языков, которые в основном используют смешение парадигм, определение ООП порой сильно различаются, вплоть до противоречий. Но по данной теме (для С++) вполне устоявшиеся и приемлимые.
18 февраля 2010 в 16:04
А в Haskell и Lisp есть ООП)?
18 февраля 2010 в 16:03
Ну 1000 это ты загнул, на С и 10к строк читаются при правильной разбивке.
Да, Михаил, +1
18 февраля 2010 в 16:02
полностью согласен!
18 февраля 2010 в 16:00
Определиться с терминами: абстракция данных — упрощение, идеализация сущностей предметной области, IOW выделение общих свойств для дальнейшей иерархии классов (объектов); Инкапсуляция — принцип, согласно которому любой класс/объект рассматривается, как "черный ящик", пользователь класса не обязан (даже не желательно) знать, как работает класс, что позволяет отделить реализацию от интерфейсной части, в дальнейшем реализация класса может измениться, а дочерние классы должны продолжать работать, при условии, если не изменится интерфейсная часть; сокрытие данных позволяет реализовать этот самый "черный ящик", реализует области видимости между иерархией классов; наследование — возможность порождать другие класс, с сохранением свойств класса-предка (суперкласса, как угодно); полиморфизм — позволяет методам (или членам-функциям) при сохранении сигнатуры иметь различные реализации, служит для сохранения неизменности интерфейса класса-предка.
Это основные парадигмы ООП. В данном случае нас интересует сокрытие данных, повторюсь, что служит для реализации класса как "черный ящик".
Если для себя можно использовать и полностью открытые классы, то для больших (ОГРОМНЫХ) проектов, сокрытие обеспечивает стабильность (уверенность так сказать) разработки.
18 февраля 2010 в 15:03
По правде говоря.
До ООП было процедурное программирование оно позволяло создавать и (главное) читать исходные коды размером где-то около 1000 строк. Далее подобный код становился запутанным. А код нужно было увеличивать! Ведь прогресс не стоит на месте. Для этого кто-то придумал ООП. Это позволило писатьпроги более 1000 строк кода не заболеть).
Производительность конечно тоже возросла. Да вот только если переставить С++ ООП прогу на С она скорее всего будет короче.
Да вот представлять себе это не кто и не захочет.))
18 февраля 2010 в 15:02
ООП ваще для этого и создана.
18 февраля 2010 в 15:02
Гхм. Наследование и полиформизм лично мне дают возможность не писать один и тот же код несколько раз. Это удобство? Это увеличение производительности, однозначно.)
А вот закрытые классы – только чтобы не запутаться в своих мозгах, видимо)
18 февраля 2010 в 15:00
Инкапсуляция – Это нужно для того чтобы создавать классам интерфейсы через которые можно было бы осуществлять доступ его данным и методам. А в другом случае это будет не класс а головная боль сплошная! (типа все данные видны и хрен пойми чо за это класс и чо с ним надо делать)
А это в свою очередь влияет на процесс разработки ПО (особенно в команде).
Это очень ВАЖНЫЙ принцип ООП, не будете его соблюдать ООП прогер из вас не получиться!
private – скрывает данные и методы ото всех других классов (образуя внутренний механизм работы объектов класса в который не кому нельзя вмешиваться (а иногда и знать его!)).
protected – скрывает данные и методы ото всех кроме потомков (образуя примерно тоже самое, разрешая потомкам менять данные и методы на свои собственные (override))
18 февраля 2010 в 15:00
Ммм. Я без опыта практически, и пока что сокрытие данных, впрочем, как и половина ООП, пригодилась мне только для того, чтобы не запутаться.
По сути, #14, "придется", что какбе намекает, что инкапсуляция нужна только для удобства.)
Или я не прав)?
18 февраля 2010 в 11:05
ага, и заведомо разжигает флейм: зачем скрывать данные и методы.
В С++, Java, C# иже с ними —- это основополагающие принципы инкапсуляции. В perl (хотя и существует возможность большего сокрытия, нежели в вышеназванных языках). CLOS вообще поддерживает самым естественным для языка образом. Изначальный OOP язык (именно ООП, а не смешение парадигм)— Smalltalk напоминает лисповскую (точнее наоборот лисп перенял от смолтолка).
И самое забавное, каждый из программистов, практикующий ООП, назовет десяток аргументов в защиту тех языковых средств ООП, которые он считает важными. в том числе и инкапсуляция, наследование, полиморфизму иабстрагирование. А так вики в помощь, почитать книжки, попрактиковаться etc. Либо сменить язык, среду, операционку, пол, ориентацию etc.
18 февраля 2010 в 2:00
eще один с опытом!
читай :
"а придется использовать метод set, который не позволит задать неправильную дату"
18 февраля 2010 в 1:05
А действительно – зачем? То, что описал Николас Белый, можно было сделать и публичным). Наверное, для более наглядной организациипроекта)?
17 февраля 2010 в 19:02
ППц вы придурки помоч не можете вот Nickolay White все путем обьсянил за что пасиб ему
17 февраля 2010 в 19:02
Блин посмотрите мою тему, оч нада
17 февраля 2010 в 18:00
сообщения со взломанного аккаунта =>следовательно спам
17 февраля 2010 в 17:04
ололо)))))) автор жжот!! умный тролль!! ))))
17 февраля 2010 в 17:02
пускай админы немедленно удалят тему, чтобы никтоне отвелкался на это, эта тема откуда то скопированна, т ТС не понимает значение написанного.
17 февраля 2010 в 17:01
Это для инкапсуляции.
Пример –
class Data
{
private:
int day, year, month;
public:
void set(….)
}
Есть класс, который хранит день, месяц и год.
Причём хранит это в private. Т.е. никто снаружи класса не может их менять
И есть метод set, который проверяет и устанавливает дату.
Вот если бы day, month и year были бы public
то ты могла бы поставить дату 31 февраля 10000 года.
А так как они private, то тебе всегда придется использовать метод set, который не позволит задать неправильную дату
17 февраля 2010 в 17:01
даж слишком умньій
17 февраля 2010 в 17:01
Три года и такие вопросы
17 февраля 2010 в 17:00
Вы тогда вообще ничего не понимаете ) Читайте книги
17 февраля 2010 в 17:00
книг кучу перечитано, опыт 3 года,а понять не могу я всегда делаю все открытымии не вижу ничего не удобного или проблемного
17 февраля 2010 в 17:00
вы гляньте странциу её, там же одно порно, это пади умный тролинг