singlepost

Вопрос любитеям ООП программирования? << На главную или назад  

У меня вопрос зачем нужны запреты protected и private в определениях классов в среде С++?Не могу понять логику зачем нужно что то запрещать?Приведите примерчик пожалуйста

30 ответов в теме “Вопрос любитеям ООП программирования?”

  1. 28
    Михаил Черкашин ответил:

    наверно находятся ценители, но ознакомиться с ними, так бегло прочитать, все же стоит: симула первой ввела ООП, смолтолк развил идеи.
    Ну конечно более правильным будет изучение CLOS.

  2. 27
    Михаил Черкашин ответил:

    RFC: Это если интересно "академическое" программирование, так покодить чего-нибудь для себя, для "промышленного" и не нужно на них заморачиваться ;)

  3. 26
    Александр Лищенер ответил:

    Сейчас вообще кто-нибудь пишет под Simula\Smalltalk?)

  4. 25
    Михаил Черкашин ответил:

    Для ANSI стандарта лиспа есть модель CLOS (Common Lisp Object System), примерно похожа на "чистые" ООП-языки вроде Simula или Smalltalk.

  5. 24
    Михаил Черкашин ответил:

    Ну это классические определения (в духе Алана Кея). Теория полезная вещь ;) .
    Стоит заметить, что для различных языков, которые в основном используют смешение парадигм, определение ООП порой сильно различаются, вплоть до противоречий. Но по данной теме (для С++) вполне устоявшиеся и приемлимые.

  6. 23
    Александр Лищенер ответил:

    А в Haskell и Lisp есть ООП)?

  7. 22
    Александр Лищенер ответил:

    Ну 1000 это ты загнул, на С и 10к строк читаются при правильной разбивке.
    Да, Михаил, +1

  8. 21
    Алмас Аяпов ответил:

    полностью согласен!

  9. 20
    Михаил Черкашин ответил:

    Определиться с терминами: абстракция данных — упрощение, идеализация сущностей предметной области, IOW выделение общих свойств для дальнейшей иерархии классов (объектов); Инкапсуляция — принцип, согласно которому любой класс/объект рассматривается, как "черный ящик", пользователь класса не обязан (даже не желательно) знать, как работает класс, что позволяет отделить реализацию от интерфейсной части, в дальнейшем реализация класса может измениться, а дочерние классы должны продолжать работать, при условии, если не изменится интерфейсная часть; сокрытие данных позволяет реализовать этот самый "черный ящик", реализует области видимости между иерархией классов; наследование — возможность порождать другие класс, с сохранением свойств класса-предка (суперкласса, как угодно); полиморфизм — позволяет методам (или членам-функциям) при сохранении сигнатуры иметь различные реализации, служит для сохранения неизменности интерфейса класса-предка.
    Это основные парадигмы ООП. В данном случае нас интересует сокрытие данных, повторюсь, что служит для реализации класса как "черный ящик".
    Если для себя можно использовать и полностью открытые классы, то для больших (ОГРОМНЫХ) проектов, сокрытие обеспечивает стабильность (уверенность так сказать) разработки.

  10. 19
    Алмас Аяпов ответил:

    По правде говоря.
    До ООП было процедурное программирование оно позволяло создавать и (главное) читать исходные коды размером где-то около 1000 строк. Далее подобный код становился запутанным. А код нужно было увеличивать! Ведь прогресс не стоит на месте. Для этого кто-то придумал ООП. Это позволило писатьпроги более 1000 строк кода не заболеть).

    Производительность конечно тоже возросла. Да вот только если переставить С++ ООП прогу на С она скорее всего будет короче.
    Да вот представлять себе это не кто и не захочет.))

  11. 18
    Алмас Аяпов ответил:

    ООП ваще для этого и создана.

  12. 17
    Александр Лищенер ответил:

    Гхм. Наследование и полиформизм лично мне дают возможность не писать один и тот же код несколько раз. Это удобство? Это увеличение производительности, однозначно.)
    А вот закрытые классы – только чтобы не запутаться в своих мозгах, видимо)

  13. 16
    Алмас Аяпов ответил:

    Инкапсуляция – Это нужно для того чтобы создавать классам интерфейсы через которые можно было бы осуществлять доступ его данным и методам. А в другом случае это будет не класс а головная боль сплошная! (типа все данные видны и хрен пойми чо за это класс и чо с ним надо делать)

    А это в свою очередь влияет на процесс разработки ПО (особенно в команде).

    Это очень ВАЖНЫЙ принцип ООП, не будете его соблюдать ООП прогер из вас не получиться!

    private – скрывает данные и методы ото всех других классов (образуя внутренний механизм работы объектов класса в который не кому нельзя вмешиваться (а иногда и знать его!)).
    protected – скрывает данные и методы ото всех кроме потомков (образуя примерно тоже самое, разрешая потомкам менять данные и методы на свои собственные (override))

  14. 15
    Александр Лищенер ответил:

    Ммм. Я без опыта практически, и пока что сокрытие данных, впрочем, как и половина ООП, пригодилась мне только для того, чтобы не запутаться.
    По сути, #14, "придется", что какбе намекает, что инкапсуляция нужна только для удобства.)
    Или я не прав)?

  15. 14
    Михаил Черкашин ответил:

    ага, и заведомо разжигает флейм: зачем скрывать данные и методы.
    В С++, Java, C# иже с ними —- это основополагающие принципы инкапсуляции. В perl (хотя и существует возможность большего сокрытия, нежели в вышеназванных языках). CLOS вообще поддерживает самым естественным для языка образом. Изначальный OOP язык (именно ООП, а не смешение парадигм)— Smalltalk напоминает лисповскую (точнее наоборот лисп перенял от смолтолка).
    И самое забавное, каждый из программистов, практикующий ООП, назовет десяток аргументов в защиту тех языковых средств ООП, которые он считает важными. в том числе и инкапсуляция, наследование, полиморфизму иабстрагирование. А так вики в помощь, почитать книжки, попрактиковаться etc. Либо сменить язык, среду, операционку, пол, ориентацию etc.

  16. 13
    Подмогаев Свят ответил:

    eще один с опытом!
    читай :
    "а придется использовать метод set, который не позволит задать неправильную дату"

  17. 12
    Александр Лищенер ответил:

    А действительно – зачем? То, что описал Николас Белый, можно было сделать и публичным). Наверное, для более наглядной организациипроекта)?

  18. 11
    Светлана Зарницина ответил:

    ППц вы придурки помоч не можете вот Nickolay White все путем обьсянил за что пасиб ему

  19. 10
    Сергій Сухарчук ответил:

    Блин посмотрите мою тему, оч нада

  20. 9
    Василий Some ответил:

    сообщения со взломанного аккаунта =>следовательно спам

  21. 8
    Евгений Шевченко ответил:

    ололо)))))) автор жжот!! умный тролль!! ))))

  22. 7
    Павел Васильченко ответил:

    пускай админы немедленно удалят тему, чтобы никтоне отвелкался на это, эта тема откуда то скопированна, т ТС не понимает значение написанного.

  23. 6
    Nickolay White ответил:

    Это для инкапсуляции.
    Пример –
    class Data
    {
    private:
    int day, year, month;
    public:
    void set(….)
    }
    Есть класс, который хранит день, месяц и год.
    Причём хранит это в private. Т.е. никто снаружи класса не может их менять
    И есть метод set, который проверяет и устанавливает дату.
    Вот если бы day, month и year были бы public
    то ты могла бы поставить дату 31 февраля 10000 года.
    А так как они private, то тебе всегда придется использовать метод set, который не позволит задать неправильную дату

  24. 5
    Сергій Сухарчук ответил:

    даж слишком умньій

  25. 4
    Константин Конашенков ответил:

    Три года и такие вопросы

  26. 3
    Константин Конашенков ответил:

    Вы тогда вообще ничего не понимаете ) Читайте книги

  27. 2
    Светлана Зарницина ответил:

    книг кучу перечитано, опыт 3 года,а понять не могу я всегда делаю все открытымии не вижу ничего не удобного или проблемного

  28. 1
    Павел Васильченко ответил:

    вы гляньте странциу её, там же одно порно, это пади умный тролинг

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.