Другие языки программирования и технологии
Что такое ООП для человека который не знает других парадигм
Допустим я студент и всю жизнь писал на Delphi, C++, C# и других объектно-ориентируемых языках. Посмотрев разные видеоролики на Youtube, почитав книги мне так и не удалось понять что такое ООП и чем таким особенным он отличается от того же C который не является объектно ориентированным. Где можно узнать что же все-таки такое это ООП доступным языком и чем он так плох (часто об этом слышу) или наоборот хорош.
Так бывает, людям трудно в частностях увидеть общее. Более того, работая по уже налаженной схеме, используя обычные приёмы можно не знать их истинного смысла, не разбираться в терминологии, которая помогает постичь это "общее".
Вот что значит правильно сформулированный вопрос
УФ. Вы предпочитаете прозу?
Г-н Ж. Нет, я не хочу ни прозы, ни стихов.
УФ. Так нельзя: или то, или другое.
Г-н Ж. Почему?
УФ. По той причине, сударь, что мы можем излагать свои мысли не иначе, как прозой или стихами.
Г-н Ж. Не иначе, как прозой или стихами?
УФ. Не иначе, сударь. Все, что не проза, то стихи, а что не стихи, то проза.
Г-н Ж. А когда мы разговариваем, это что же такое будет?
УФ. Проза.
Г-н Ж. Что? Когда я говорю: "Николь, принеси мне туфли и ночной колпак", это проза?
УФ. Да, сударь.
Г-н Ж. Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой.
© Жан-Батист Мольер. Мещанин во дворянстве
Вот что значит правильно сформулированный вопрос
УФ. Вы предпочитаете прозу?
Г-н Ж. Нет, я не хочу ни прозы, ни стихов.
УФ. Так нельзя: или то, или другое.
Г-н Ж. Почему?
УФ. По той причине, сударь, что мы можем излагать свои мысли не иначе, как прозой или стихами.
Г-н Ж. Не иначе, как прозой или стихами?
УФ. Не иначе, сударь. Все, что не проза, то стихи, а что не стихи, то проза.
Г-н Ж. А когда мы разговариваем, это что же такое будет?
УФ. Проза.
Г-н Ж. Что? Когда я говорю: "Николь, принеси мне туфли и ночной колпак", это проза?
УФ. Да, сударь.
Г-н Ж. Честное слово, я и не подозревал, что вот уже более сорока лет говорю прозой.
© Жан-Батист Мольер. Мещанин во дворянстве
Как говорит нам капитан Очевидность, ООП - это П с использованием Объектной Модели.
Ты же путаешь П и язык. Даже на ОО языке можно писать, не используя ОМ. Чем ты, похоже, и занимаешься. А зря.
Основное преимущество ОМ перед другими парадигмами в том, что она позволяет моделировать объекты реального мира через их свойства и поведение. При этом модель не будет полным описанием предмета, а лишь необходимым в рамках некоторой задачи. Ну и три кита ООП на закуску:
Наследование - способность классов-потомков наследовать свойства и поведение предков. Потомок может расширять функционал предка по мере усложнения либо уточнения модели.
Полиморфизм - способность классов-потомков изменять поведение предков. Позволяет создавать дополнительные модели на основе базовых.
Инкапсуляция - упаковка свойств и поведения в единое целое.
Такие вот дела. ООП - это не про языки, это про моделирование. Исходи из этого.
Ты же путаешь П и язык. Даже на ОО языке можно писать, не используя ОМ. Чем ты, похоже, и занимаешься. А зря.
Основное преимущество ОМ перед другими парадигмами в том, что она позволяет моделировать объекты реального мира через их свойства и поведение. При этом модель не будет полным описанием предмета, а лишь необходимым в рамках некоторой задачи. Ну и три кита ООП на закуску:
Наследование - способность классов-потомков наследовать свойства и поведение предков. Потомок может расширять функционал предка по мере усложнения либо уточнения модели.
Полиморфизм - способность классов-потомков изменять поведение предков. Позволяет создавать дополнительные модели на основе базовых.
Инкапсуляция - упаковка свойств и поведения в единое целое.
Такие вот дела. ООП - это не про языки, это про моделирование. Исходи из этого.
Карен Еганян
Я правильно понимаю что ООП нужно лишь для легкой читаемости кода и не добавляет никакого необходимого функционала, а ещё при этом всем ухудшает быстродействие (в более серьезных программных продуктах где важна каждая миллисекунда)?
C++-подобное ООП (к которому относятся и C++, и C#, и Delphi) - это разновидность имративного программирования. Надстройка над процедурным программированием (С, классический Pascal), облегчающая разбиение кода программы на логически независимые компоненты - классы.
Недостатком этого варианта ООП является как смешивание в одну бесформенную кучу кода и данных, так и избыток совершенно ненужной магии (предопределённый this и т. п.).
Каждый компонент страуструповской мантры "полиморфизм, инкапсуляция, наследование" не является исключительным признаком ООП. Более того, существуют ООП-языки вообще без наследования или без инкапсуляции.
Посмотри в сторону Go - там куда более простой и понятный вариант ООП.
Недостатком этого варианта ООП является как смешивание в одну бесформенную кучу кода и данных, так и избыток совершенно ненужной магии (предопределённый this и т. п.).
Каждый компонент страуструповской мантры "полиморфизм, инкапсуляция, наследование" не является исключительным признаком ООП. Более того, существуют ООП-языки вообще без наследования или без инкапсуляции.
Посмотри в сторону Go - там куда более простой и понятный вариант ООП.
Карен Еганян
Я правильно понимаю что ООП нужно лишь для легкой читаемости кода и не добавляет никакого необходимого функционала, а ещё при этом всем ухудшает быстродействие (в более серьезных программных продуктах где важна каждая миллисекунда)?
Напиши чего-нибудь более-менее крупное на просто паскале (со знанием delphi это не составит проблем), поймёшь разницу. Особенно если в программе будут часто повторяющиеся одинаковые куски кода, а потом ещё и в этих кусках кода придётся сделать какую-то правку
Александр Кулебякин
Лучше не на Pascal (который в принципе не годится для написания "чего-нибудь крупного"), а на Modula-2: ООП нет, а разбивать большой проект на компоненты удобно.
В Си нельзя писать функцию внутри структуры. В ООП такая функция называется "метод". Метод отличается от обычной функции тем, что имеет неявняй параметр - this - это ссылка на объект, для которого вызван метод. Кроме того, методы могут быть виртуальными. Не виртуальные методы - это просто синтаксический сахар к обычным функциям. Виртуальные методы можно реализовать на Си, но надо приложить некоторые усилия.
И конечно, в Си нет наследования.
Скрытие членов класса мне не кажется принципиально важной возможностью ООП.
ООП позволяет описать структуру (класс) так, чтоб нельзя было создать экземпляр (объект) без правильной инициализации. Это обеспечивается конструкторами. В Си нет такой возможности.
Вообще, отличий C++ от Си очень много. Если ты их не заметил, ты очень поверхностно знаешь C++.
И конечно, в Си нет наследования.
Скрытие членов класса мне не кажется принципиально важной возможностью ООП.
ООП позволяет описать структуру (класс) так, чтоб нельзя было создать экземпляр (объект) без правильной инициализации. Это обеспечивается конструкторами. В Си нет такой возможности.
Вообще, отличий C++ от Си очень много. Если ты их не заметил, ты очень поверхностно знаешь C++.
Давид ..
Это абстракция, точнее некоторая магия синтаксического анализатора компиляторов С++ -никакого кода в структурах\классах C++ не содержится.
Сергей Пономарь
Если человек начал мыслить в стиле ООП, то и на простом С, даже на ассемблере он будет так писать. Просто нет поддержки со стороны языка.
Не заморачивайся. Просто пиши и всё.
Вкратце, ООП - это способ написания программ, разделяя их на отдельные сущности - классы, методы и т. д. Каждая сущность имеет свой набор логики.
Например, на C ты бы плавание на реке написал как: структура лодки, скажем, и функции, принимающие указатель на лодку, делающие что-то над этой лодкой.
В ООП почти точно так же, только можно указывать функции прямо внутри класса лодки. То есть лодка является отдельной сущностью, имеющая какие-то свойства (например, цвет, форма, скорость, прочность) и способная делать какие-то действия (например, ускоряться, ломаться или наклоняться).
Например, на C ты бы плавание на реке написал как: структура лодки, скажем, и функции, принимающие указатель на лодку, делающие что-то над этой лодкой.
В ООП почти точно так же, только можно указывать функции прямо внутри класса лодки. То есть лодка является отдельной сущностью, имеющая какие-то свойства (например, цвет, форма, скорость, прочность) и способная делать какие-то действия (например, ускоряться, ломаться или наклоняться).
Похожие вопросы
- Как думаете, можно ли сознать программу, которая будект знать всё, и решать любые вопросы?
- Кто не прав: программист, который не понимает пользователя, или пользователь, который не знает, что ему нужно?
- Может ли программист, который хорошо знает один, два или три языка программирования, переключиться на любой другой?
- смотрите внутри)) ) назовите мне плиз игровые 3д движки которые вы знаете. хочу создать лёгонькую игрушку для себя)))
- Список алгоритмов, которые должен знать каждый программист?
- Что такое парадигма ООП и вообще слово "парадигма"?
- Вы любите использовать парадигму ООП? Почему?
- Изучнние ООП - стоит ли сейчас?
- ООП. Стоит ли браться за ООП новичку в программировании?:
- ООП - зло. Ваше мнение.