Я делаю презентацию, которая показывает различия между структурным и объектно-ориентированным программированием, и я хочу проиллюстрировать, почему людям нужен ООП, на примере, где применение концепций ООП значительно облегчит кодирование, чтобы аудитория действительно почувствовала, что им нужен ООП.
Любые идеи ??
java
c++
object-oriented
Ahmed
источник
источник
Ответы:
Возможно, вы захотите посмотреть этот быстрый видео-блог . В результате разница между структурным программированием и ОО-программированием заключается в том, что они отнимают от программирования, а не в том, что они добавляют. Программные дисциплины, такие как структурированное программирование и объектно-ориентированное программирование, ограничивают, а не включают. Вот несколько определений. Предупреждение: они вам не понравятся.
Структурированное программирование - это дисциплина, налагаемая на goto (прямая передача контроля)
ОО-программирование - это дисциплина, налагаемая на указатели на функции (косвенная передача контроля)
Функциональное программирование - это дисциплина, навязанная при назначении.
Первое не так сложно понять. Дейкстра обнаружил, что невозможно создать общие доказательства правильности, когда goto разрешено в алгоритмах. Однако если управляющие структуры были ограничены последовательностью, выбором и итерацией, тогда были возможны доказательства правильности . Конечно, в настоящее время мы даже не пытаемся доказать, что все правильно, но нам нравится простота и элегантность структурного программирования.
Это немного сложнее понять ОО. Мы часто определяем ОО как инкапсуляцию, наследование и полиморфизм. Что менее известно, так это то, что все три из этих атрибутов достижимы и часто были достигнуты в C. Действительно, C ++ начинался как просто препроцессор, компилируемый до C. На самом деле нетрудно инкапсулировать в C. И не сложно построить структуры данных, которые являются подмножествами друг друга, имитируя наследование. Полиморфизм, однако, немного сложнее. Требуются указатели на функции, которыми в Си трудно хорошо управлять. Языки, подобные C ++, дали нам дисциплину, навязанную этим указателям на функции. Компилятор C ++ создал для нас vtables и инициализировал указатели внутри них в соответствии со строгим формализмом. Так что в реальном смысле ОО это просто дисциплинакосвенная передача управления, т.е. указатели на функции.
Структурированное программирование о том, как не использовать goto. ОО о том, как не использовать указатели на функции. И функциональное программирование тоже все о том, чего не делать. В функциональном программировании мы не присваиваем переменные, кроме как в самых строго контролируемых случаях.
Таким образом, в конце концов, все эти «технологии» в программировании на самом деле ограничивают дисциплины, а не создают технологии. Они говорят нам , что не делать больше , чем они говорят нам , что для делать. А это значит, что разработка программного обеспечения не росла за последние 40 лет. Скорее это сократилось. Это становится еще более ограниченным, поскольку мы узнали все, что не должны делать.
Учиться тому, чего не следует делать - это хорошо; но вот мешая вопрос: Какие новые вещи мы узнали , чтобы сделать?
источник
Есть 3 основных способа программирования компьютера:
goto
s, как в старых интерпретаторах BASIC или на ассемблере. Мало кто программирует таким образом больше.На мой взгляд, объектно-ориентированное программирование - это нечто иное. Речь идет о том, как организовать вашу программу в большем масштабе. Он не заменяет и не устаревает ни одной из 3 парадигм, которые я упомянул выше - в теле метода вам все равно нужно выбрать одну из 3 парадигм из списка для записи.
источник
Это все о том, как вы ожидаете перемен.
Обе концепции поддаются повторному использованию, но ООП открывает двери для более легких изменений. ООП обладает всеми возможностями повторного использования, что и структурное программирование, но вы также можете использовать его для создания новых функций с меньшими усилиями.
Можно сказать, что ООП наследует все функциональные возможности структурного программирования с дополнительными функциональными возможностями наследования! :-D
источник
Понятия ортогональны. Структурированное программирование - это структурирование кода внутри процедур / функций / методов. Совершенно возможно (и желательно) следовать принципам структурированного программирования в методах класса при выполнении ООП.
источник
Это своего рода субъективная формулировка - структурированное программирование и ООП - это стили решения проблем, и один не всегда лучше другого. Написание библиотеки числовых методов имеет смысл, если выполняется в структурированном стиле, где вы выполняете преобразования для входных данных. Однако простой агент, управляемый конечным автоматом, может быть легко выражен как отдельный класс в Java или C ++. ООП может быть естественным способом выражения контейнеров хранения для структур данных.
Разговор о сокрытии информации и модульности - это хороший способ мотивировать ООП как стиль.
Интересный взгляд на этот вопрос был написан Стивом Йегге - в некотором смысле, одним из лучших описаний различий в подходах между двумя стилями.
источник
ООП легче понять, когда вы делаете бизнес-модель. Когда вы думаете об элементах приложения, вы используете некоторые ОБЪЕКТЫ и ОТНОШЕНИЯ между ними, например, Книга имеет Автор (ы), Название, ISBN. Книга для сдачи в библиотеку и может быть заимствована студентом. Структурное программирование заставляет думать о конкретных процессах, реализациях не в абстракции.
ООП предназначен для легких изменений. Изменение в структурной программе возможно, но должно быть описано кодом. Изменения в ОО-программе могут быть описаны абстрактным изменением модели.
источник
Переменная Область:
Я думаю, что принцип языков, обеспечивающих хорошее программирование, заключается в ограничении области видимости переменных. В структурированных языках, таких как C, область действия в основном бывает двух типов:
Мы все знаем, что глобальный охват вреден. Но иногда локальных областей недостаточно для запуска программы. Избегание глобальных областей затем приводит к более широкому использованию указателей, которые позволяют использовать переменные вне области видимости. Но указатели трудно понять и использовать.
Языки ООП, такие как C ++, добавляют новый тип области видимости - область класса / объекта посредством инкапсуляции. Эта область видимости еще больше усиливается частными / публичными вариациями. И это решает многие проблемы переменной области видимости. Области более определены в ООП. И указатели менее нужны.
Это одна из замечательных особенностей ООП.
источник