Java

чем отличается структурно процедурное програмирование от обьектно ориентированого?)

Если коротко сюто ООП это методология программирования в котором программа представляется в виде совокупности обектов которые в свою очередь состоят из класов, которы между собой взаимодействуют и наследуются. А процедкюурный язык это набор процедур гемор еще тот... Скажем тебе надо написать простейший браузер на джава ты напишешь его испольщуя штук 20 классов. Состоящих из 20 меетодов к стати еще один плюс ооп что объекты всегда принадлежат какомуто классу. Так что в случае ошибки знаешь в какой класс лезть и в какой метод... С процедурным же так не получится в этой каше чёрт ногу сломит...
Максим Лукьянов
Максим Лукьянов
31 017
Лучший ответ
Не существует структурно процедурного программирования.

Есть процедурное программирование: программа разбивается на отдельные вычислительные блоки - подпрограммы.

Есть структурное программирование: стиль написания (скорее, конструирования) кода, способствующий формальной верификации и упрощающий понимание чужого кода. К сожалению, модный сейчас С-style не способствует структурному программированию.

"Процедурное программирование" и "структурное программирование" - это понятия разных классов. Процедурная программа далеко не всегда бывает структурной, а структурное программирование применяется далеко не только в процедурном подходе.

Термин ООП имеет множество разных значений (ООП в Smaltalk и ООП в Java - это совершенно разные понятия), но обычно сейчас под ООП подразумевают исключительно C++-style ООП, представляющее собой надстройку над процедурным программированием, заключающуюся в том, что подпрограмма (обычно именуемая методом) запускается в контексте блока данных (обычно именуемого объектом).

Модная мантра "инкапсуляция, полиморфизм, наследование" - это всего лишь красивый лозунг, не слишком хорошо сочетающийся с реальностью.

Полиморфизм прекрасно реализуется безо всякого ООП - если в языке есть процедурные типы. И появился он задолго до ООП.

Инкапсуляция? Так есть языки без ООП с инкапсуляцией и ООП-языки без инкапсуляции. Так что инкапсуляция не является исключительным и обязательным свойством ООП.

Наследование? Оно создаёт куда больше проблем, чем решает. Полиморфизм через интерфейсы (которые вовсе не ООП, а контрактное программирование) проще и надёжнее полиморфизма через наследование. А всё, что делается посредством наследования, можно реализовать через композицию и агрегацию. Так что ООП без наследования - это вполне себе современная и даже местами модная (Go) реальность.
Степенью абстракционирования от архитектуры.
Никита Круглов
Никита Круглов
55 734
Если кратко - различия в способах мышления разработчика, которые требуются для написания программ в том и другом стиле.
Считается, что ООП более подходит для решения задач моделирования окружающего мира, поскольку человек в этом мире видит вокруг себя кучу разных объектов, которые обладают разными признаками и обмениваются друг с другом сообщениями. Получается как бы минимальный барьер между естественно-языковым (концептуальным) описанием предметной области и ее программной моделью.
При структурном подходе человеку в конечном счете приходится мыслить отдельными переменными, процедурами и функциями, которые он непосредственно не наблюдает в окружающем мире. Поэтому структурный подход требует больше мысленных усилий для построения программной модели предметной области.