Re: Что такое ООП
От: Сергей Глазунов Украина  
Дата: 29.05.03 09:52
Оценка: 29 (3) +2
Здравствуйте, Rumata, Вы писали:

R>Сразу просьба: не кидайте тухлыми овощами. =)


R>Пару месяцев назад задался целью узнать, что такое ООП. Максимум, что получилось — вышел на omg. Но там тоже толком ничего нет. Может быть all сможет показать мне четкую формулировку, что же такое этот самый ООП =)


Обратимся к гигантам мысли, итак

В 1988 году Бьярн Страуструп, автор Си++ (Bell Lab) говрит следующее:
"Объектно-ориентированное программирование" - это средство, парадигма для 
написания "хороших программ".

Тогда-же он объясняет термин "хорошая программа":
  • Допускает повторное использование для разработки других программ.
  • Расширяема, т.е. требует минимальных затрат на перепрограммирование при внесении дополнительных свойств или модификации существующих.
    Надежна.
  • Мобильна, т.е. подразумевает минимальные затраты при переносе на другие платформы.
  • Дешева. Затраты на реализацию проектов бывают столь высоки, что порой от них приходится просто отказываться.
    Принципы ООП представляют лучший из известных ответов на вопрос "как писать хорошие программы?"

    В 1989 году Bertrand Meyer, автор книги Object-Oriented Software Construction(Prentice-Hall) дает определение ООП:
    "Объектно-ориентированный дизайн - это построение программных систем как
     структурированных наборов реализаций абстрактных типов данных".

    Основная мысль заключается в построении (разработке) программы из классов объектов, которыми она манипулирует, а не из функций, которые над ними (объектами) выполняются. Под классом подразумевается реализованный абстрактный тип данных, а под объектом — конкретные данные, т.е. экземпляр данного типа (класса). Что касается функций, то они определяются свои — над каждым типом данных, при этом сами данные (объекты) оказываются доступными только через эти функции, составляющие официальный интерфейс данного класса, другими словами, реализация типа полностью скрыта (инкапсуляция).

    источник www.smalltalk.ru
    ... << RSDN@Home 1.0 beta 7a... а еще я в нее ем >>
  • Re[15]: Что такое ООП
    От: Rumata Россия http://atamur.livejournal.com
    Дата: 29.05.03 09:53
    Оценка: +1 -1
    Здравствуйте, Sergey, Вы писали:

    S>А как предполагается записывать эту самую математическую модель? Уж не на языке ли программирования каком-нибудь? Это я к тому, что программист эту математическую модель сам придумывает.

    Ну почему же, я вот верю, что математика в конце концов опишет все =)
    Дело в том, что я сначаала начал пользоваться реляционными бд (в т.ч. и нормальными формами), а потом прочитал теорию, почему нормальные форму лучше, чем ненормальные. С тех пор мне кажется, что за любым "rule of thumb", которое на практике облечает программисту жизнь лежит некоторое математическое обоснование =)
    Re[17]: Что такое ООП
    От: Rumata Россия http://atamur.livejournal.com
    Дата: 29.05.03 09:55
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Здравствуйте, Rumata, Вы писали:


    WH>>Это означает что красивость кода тоже важна.

    R>>Э-э-э ну а я собственно говорю, что красивость хоть и приятна, но не так уж важна по большому счету.

    AVK>Важна, еще как важна. Красота кода это оборотная сторона утилитарности. Код это не дом или автомобиль, в процессе своей жизни код непрерывно эволюционирует. И если он написан некрасиво то жизнь такого кода будет тяжелой и недолгой.

    Ну здесь на самом деле можно долго спорить, т.к., например, что такое красота кода? Где-то недавно пробегала тема про что-то вроде $f = $f & func(); Кому-то это кажется красивым и удобным, кому-то — некрасивым и неудобным. Но в общем, я с Вами все-таки согласен — мне красивый код тоже нравится больше, чем некрасивый, хотя, если он работает — это не так уж важно. =)
    Re[4]: Что такое ООП
    От: Rumata Россия http://atamur.livejournal.com
    Дата: 29.05.03 10:00
    Оценка:
    Здравствуйте, Sinclair, Вы писали:

    S>Здравствуйте, Rumata, Вы писали:

    R>>Вот только опять не понятно, являются ли приведенные там документы какими-либо стандартами. неужели за более чем 10 лет развития, под ООП не подвели никаких признаных стандартов вообще?
    S>В каком смысле стандартов? Стандартов математизации? А такие вообще есть? У нас хоть одна область математики оборудована каким-то стандартом? Или физика там? "Комитет ISO постановил пользоваться Гейзенберговским представлением квантовых операторов, так как оно наилучшим образом удовлетворяет потребности всех заинтересованных сторон". Все. Обновляем все учебники со Шредингеровским представлением. Ха-ха-ха.
    S>Нет, на эту область стандартов нет и не будет. Если достаточное количество народу будет задумываться что и почему они делают, а не как добиться конкретной фичи, то есть шанс сформировать более-менее общепринятую терминологию. Пока что ООП находится примерно в той же стадии исследования, что и экономика — каждый автор свободно использует термины в своем смысле, и зачастую не в одном.
    Тут я ну никак не могу с Вами согласиться. Математика строит модели реальной жизни. Раз есть реальная жизнь, будет и модель. Ту же экономику потихоньку описывают с разной точностью. А программирование все-таки чуть более структурированная штука. Из-за того, хотя бы, что в конце концов программа должна работать на машине фон-Неймана, которая очень даже хорошо описана.

    А пока, как я понял, даже с терминологией не договорились. =((
    Re[4]: Что такое ООП
    От: Rumata Россия http://atamur.livejournal.com
    Дата: 29.05.03 10:02
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>Стандартов нет, но если нужны теории — то изучайте дискретную математику и абстрактную алгебру, а именно: теорию графов, теорию конечных автоматов, мат. лог, алгебру логики, сложность алгоритмов,

    А>теорию структур, формальные языки, распознавание образов и т.д.
    Изучаю. А вот курса ооп у нас вроде как не намечается. Похоже, что нам покажут c++, скажут, что в нем бывают объекты и на этом все закончится =)
    Re[5]: Что такое ООП
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.05.03 10:16
    Оценка:
    Здравствуйте, Rumata, Вы писали:

    R>Тут я ну никак не могу с Вами согласиться. Математика строит модели реальной жизни. Раз есть реальная жизнь, будет и модель. Ту же экономику потихоньку описывают с разной точностью.


    А программирование тоже в конечном итоге описывает реальную жизнь, как это не парадоксально.
    ... << RSDN@Home 1.0 beta 8 >>
    AVK Blog
    Re[4]: Что такое ООП
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.05.03 10:16
    Оценка:
    Здравствуйте, mihailik, Вы писали:

    M>P.S. Хотя, на сегодняшний день, самым классическим и строгим стандартным языком ООП-программирования можно считать Java. Его всякая научная общественность в институтах массово изучает, и на его основе всякое ООП проходят. Имеются ввиду, конечно, западные институты. Наши пока в программировании не авторитет.


    Я бы не был столь категоричен. В джаве очень много моментов не очень хорошо ложащихся в ОО-парадигму. Ну те же примитивные типы к примеру.
    ... << RSDN@Home 1.0 beta 8 >>
    AVK Blog
    Re[18]: Что такое ООП
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.05.03 10:16
    Оценка:
    Здравствуйте, Rumata, Вы писали:

    R>Ну здесь на самом деле можно долго спорить, т.к., например, что такое красота кода?


    Лично я считаю красивым код, который легко понять, который не содержит в себе повторяющихся кусков и который решает задачу путями, близкими к оптимальным.

    R>Где-то недавно пробегала тема про что-то вроде $f = $f & func(); Кому-то это кажется красивым и удобным, кому-то — некрасивым и неудобным. Но в общем, я с Вами все-таки согласен — мне красивый код тоже нравится больше, чем некрасивый, хотя, если он работает — это не так уж важно. =)


    Все таки настаиваю на том что важно. Потмоу что зачастую проще бывает переписать код заново, нежели модифицировать старый.
    ... << RSDN@Home 1.0 beta 8 >>
    AVK Blog
    Re[5]: Что такое ООП
    От: Dmitry123 Эстония  
    Дата: 29.05.03 10:58
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Я бы не был столь категоричен. В джаве очень много моментов не очень хорошо ложащихся в ОО-парадигму. Ну те же примитивные типы к примеру.


    Однако в ней есть оболочки для этих типов, никто не мешает использовать только их, вместо int использовать Integer и т.д.
    Re[5]: "никому", "одному" и "всем"
    От: Vi2 Удмуртия http://www.adem.ru
    Дата: 29.05.03 11:18
    Оценка: 1 (1) -1
    Здравствуйте, Rumata, Вы писали:

    R>... Кто-то решил, что их должно быть 3, т.к. это "следует из инкапсуляции". Но, т.к. понятие самой инкапсуляции, как я понимаю, само четко не сформулировано, следствия из него имхо строить довольно опасно.

    Инкапсуляция — это доступность (или сокрытие) того, что имеет объект, для кого-либо, отличного от самого объекта.

    Количество состояний доступности определяется тремя словами "никому", "одному" и "всем". Если ты сможешь найти еще слово, которое не выражается из этих трех, то тебе будет слава и почет.
    Vita
    Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
    Re[5]: Точки, множества и т.п.
    От: Vi2 Удмуртия http://www.adem.ru
    Дата: 29.05.03 11:29
    Оценка:
    Здравствуйте, Rumata, Вы писали:

    R>А пока, как я понял, даже с терминологией не договорились.

    Интересно, есть ли определение точки, множества и т.п. терминов, краеугольные для математики? Которые вроде всем известны и понятны, но тем не менее...
    Vita
    Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
    Re[6]: "никому", "одному" и "всем"
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 29.05.03 11:32
    Оценка:
    Здравствуйте, Vi2, Вы писали:

    Vi2>Количество состояний доступности определяется тремя словами "никому", "одному" и "всем". Если ты сможешь найти еще слово, которое не выражается из этих трех, то тебе будет слава и почет.


    Я знаю! "Двум"! Но это избыточно, так как помимо инкапсуляции у нас есть ещё и наследование. вот если инкапсуляция есть, а наследования нет....
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Не "всем", а "каждому" (-)
    От: Vi2 Удмуртия http://www.adem.ru
    Дата: 29.05.03 11:35
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Я знаю! "Двум"! Но это избыточно, так как помимо инкапсуляции у нас есть ещё и наследование. вот если инкапсуляция есть, а наследования нет....

    Я ошибся: не "всем", а "каждому" или "любому". "всем" может быть рассмотрено как совокупность, а это не так.
    Vita
    Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
    Re[8]: Не "всем", а "каждому" (-)
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 29.05.03 11:42
    Оценка:
    Здравствуйте, Vi2, Вы писали:

    Ну да, представь себе приблизительно такую запись

    class B;

    friend B class A;

    Тогда ЛЮБОЙ экземпляр класса В может обращаться к скрытым(приватным) членам любого экземпляра класса А, но ни один из них не наследуется от другого и они не являються потомками одного и того же класса. Пока же мы пишем Get|Set методы. Я неговорю, что это надо, я говорю, что этого нет.
    ИМХО не надо, в том смысле что если и надо то редко и не очень.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[6]: Что такое ООП
    От: AndrewVK Россия http://blogs.rsdn.org/avk
    Дата: 29.05.03 12:10
    Оценка: +2
    Здравствуйте, Dmitry123, Вы писали:

    AVK>Я бы не был столь категоричен. В джаве очень много моментов не очень хорошо ложащихся в ОО-парадигму. Ну те же примитивные типы к примеру.


    D>Однако в ней есть оболочки для этих типов, никто не мешает использовать только их, вместо int использовать Integer и т.д.


    Ты сам то использовал? Мне до сих пор иногда в кошмарных снах снится кое какой код из EJB на эту тему.
    ... << RSDN@Home 1.0 beta 8 >>
    AVK Blog
    Re[7]: Что такое ООП
    От: WFrag США  
    Дата: 29.05.03 12:24
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Здравствуйте, Dmitry123, Вы писали:


    AVK>>Я бы не был столь категоричен. В джаве очень много моментов не очень хорошо ложащихся в ОО-парадигму. Ну те же примитивные типы к примеру.


    D>>Однако в ней есть оболочки для этих типов, никто не мешает использовать только их, вместо int использовать Integer и т.д.


    AVK>Ты сам то использовал? Мне до сих пор иногда в кошмарных снах снится кое какой код из EJB на эту тему.



    В Jave 1.5 будет boxing/unboxing . Правда, только для примитивных типов.
    7. О чем невозможно говорить, о том следует молчать.
    Re[9]: Тройственная (триединая) картина
    От: Vi2 Удмуртия http://www.adem.ru
    Дата: 29.05.03 12:25
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Ну да, представь себе приблизительно такую запись
    A>class B;
    A>friend B class A;
    A>Тогда ЛЮБОЙ экземпляр класса В может обращаться к скрытым(приватным) членам любого экземпляра класса А, но ни один из них не наследуется от другого и они не являються потомками одного и того же класса. Пока же мы пишем Get|Set методы. Я неговорю, что это надо, я говорю, что этого нет.
    A>ИМХО не надо, в том смысле что если и надо то редко и не очень.

    Сколько ни вчитывался, никак не мог понять тезиса, против которого или за который ты высказываешься.

    Тройственная (триединая) картина встречается достаточно часто, чтобы она стала каноном. Триединый бог, Отрицание отрицания и т.п. (Иногда даже — если в теории нет триединства, то считается, что теория ущербна. )

    На практике, например, некая Фирма может заключать договор 1) ни с кем, 2) с определенным лицом, 3) с неопределенным лицом (публичный договор).
    Vita
    Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
    Re[7]: Что такое ООП
    От: Dmitry123 Эстония  
    Дата: 29.05.03 12:27
    Оценка:
    Здравствуйте, AndrewVK, Вы писали:

    AVK>Ты сам то использовал? Мне до сих пор иногда в кошмарных снах снится кое какой код из EJB на эту тему.


    Когда нужно было int в HashMap положить то да, в др. случаях необходимости не было
    Re[10]: Тройственная (триединая) картина
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 29.05.03 12:34
    Оценка:
    Здравствуйте, Vi2, Вы писали:

    Vi2>На практике, например, некая Фирма может заключать договор 1) ни с кем, 2) с определенным лицом, 3) с неопределенным лицом (публичный договор).


    4) С несколькими определёнными лицами.

    Например множественное наследование это канон ООП или фича?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[11]: Тройственная (триединая) картина
    От: Vi2 Удмуртия http://www.adem.ru
    Дата: 29.05.03 12:44
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>4) С несколькими определёнными лицами.

    "Росту ниже среднего и блондинки. Ух, люблю..."

    A>Например множественное наследование это канон ООП или фича?

    А какое отношение имеет "наследование" к "инкапсуляции"? Это перпенидикулярные термины.
    Vita
    Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.