ЧУДО "САИКТ"

Процедурное программирование против объектно-ориентированного

Пожалуй, каждый, кто хоть немного интересуется программированием, знает, что при разработке ПО и web-приложений используются 2 основных подхода — процедурный и объектно-ориентированный. Сразу скажем, что ни один из них не является хорошим или плохим. Это — разные способы организации кода, разные способы решения задач. Да и задачи, собственно говоря, они решают тоже разные.

 

Чем же отличается ПП от ООП? Какие преимущества и недостатки они имеют? И, наконец, какой из этих подходов следует изучать начинающему программисту?

 

Различия между процедурным и объектно-ориентированным программированием

 

Представь: тебе нужно написать небольшую программку, которая запрашивает у пользователя слово, считает количество символов в нем и выводит результат на экран (уже страшно, правда? ;-)).

 

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

 

Все эти подзадачи называются процедурами. При работе в процедурном ЯП разработчик разбивает общую задачу на более мелкие и выбирает языковые конструкции для их реализации. Этими конструкциями являются ветвления, циклы, функции и другие структурные операторы.

 

А теперь другой пример. Допустим, ты продаешь автомобили (респект!). Каждую новую машину, предназначенную для продажи, ты вносишь в каталог через специальную форму на сайте. Форма содержит следующие поля:

 

  • Марка авто
  • Модель авто
  • Мощность двигателя
  • Цвет
  • Год выпуска

 

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

 

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

 

Какой подход выберет программист в этом случае? Безусловно, объектно-ориентированный. Работа сведется к следующему: создается базовый класс «Техника», в котором будут храниться характеристики, общие и для легковых авто, и для тракторов. Затем создаются два объекта — «Легковой автомобиль» и «Трактор», которые наследуют все характеристики из класса «Техника», а затем дополняются уникальными данными — тем самым «тяговым усилием» и пр.

Таким образом, в основе объектно-ориентированного программирования лежит понятие «объект». Иначе их называют экземпляры класса, и это вполне логично, учитывая, что они многое наследуют у класса. Кстати, наследование — это один из главных принципов ООП, наряду с полиморфизмом и инкапсуляцией. Но это уже совсем другая история.

 

Преимущества и недостатки процедурного программирования

 

Увы, все в этом мире имеет свои минусы и плюсы. Среди недостатков ПП можно назвать следующие:

 

  • Риск возникновения множества ошибок при работе над большим проектом. Приходится писать много процедур, и это не может не сказаться на чистоте и работоспособности кода.
  • Все данные процедуры доступны только внутри нее. Их нельзя вызвать из другого места программы и при необходимости придется писать аналогичный код. А это уже противоречит одному из основополагающих принципов программирования, который звучит как Don’t Repeat Yourself (Не повторяйся).
  • Сложность изучения для начинающих. Этот недостаток может кому-то показаться притянутым за уши, но простая статистика свидетельствует, что процедурное программирование для большинства новичков дается сложнее, чем объектно-ориентированное.

 

Впрочем, у ПП есть и свои преимущества. Среди них отметим:

 

  • Любая процедура (функция) может быть вызвана неограниченное количество раз. Все как в жизни — ты один раз «написал» в голове маршрут к любимой пиццерии, а затем просто вызываешь эту «программу» из памяти.
  • Возможность оперативно решить задачу, в которой отсутствует сложная иерархия. Можно пойти дальше и сказать: если проект не подразумевает создания большого количества классов и объектов, то в ПП совсем нет минусов.

 

Преимущества и недостатки объектно-ориентированного программирования

 

Главным минусом использования ООП можно назвать громоздкость при решении простых задач. Сравни, например, два участка кода, написанного на PHP. Первый пример — процедурный код, второй — объектно-ориентированный. И тот, и другой скрипт ведут к одному результату: просто выводят на экран фразу «Hello, world»:

 

Скрипт №1

<?php

print «Hello, world.»;

?>

 

Скрипт №2

<?php

class helloWorld {
function myPrint() {
print «Hello, world.»;
}
}
$myHelloWorld = new helloWorld();
$myHelloWorld->myPrint();

?>

 

Показательно, не правда ли?

 

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

 

Кроме того, объектно-ориентированные языки программирования легче изучаются новичками. Взгляни на диаграмму — она отражает результаты анкетирования студентов, которые познакомились с обоими подходами к разработке. Как видно, большинство из них выбрало именно ООП для более детального изучения.

 

Подводим итоги

 

Не существует плохого или хорошего ЯП. А вот плохие программисты встречаются, и даже очень часто. Хороший разработчик умеет «помирить» два подхода к программированию в своем сознании и использует оба.

 

Помни: язык — это всего лишь инструмент. Он не должен управлять программистом так же, как хвост не может вилять котом. Если же это происходит, то виноват кот программист, но не хвост, ведь так?

При реализации того или иного проекта разработчик сам решает, как он будет реализован. Если перед тобой стоит серьезная задача, и ты понимаешь, что без классов и объектов здесь не обойтись — выбирай ОО-язык. К ним относятся Delphi, Java, C#, JavaScript.

 

Если же задача довольно проста и ты четко видишь пошаговый алгоритм ее решения, то твоя стихия — это процедурное программирование. К процедурным языкам относятся Basic, Pascal, C.

 

Кроме того, существуют ЯП, которые поддерживают обе парадигмы организации кода — PHP, C++. К ним мы питаем особую слабость :-).

 

И последнее: в Академии мы изучаем и процедурное, и объектно-ориентированное программирование. Хочешь стать одним из нас? Занимай свое место в группе!

Яндекс.Метрика