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

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

Целью статьи является рассмотреть какой стиль программирования предпочтительнее в различных ситуациях. Для выполнения цели применяются следующие методы: сравнение, детализация, анализ и методы формальной логики. Результатом работы стали выводы о том, когда лучше использовать объектно-ориентированный стиль программирования, а когда – процедурный.

Авторы публикации

Рубрика

IT-Технологии

Журнал

Журнал «Научный лидер» выпуск # 28 (73), июль ‘22

Дата публицакии 07.07.2022

Поделиться

Язык программирования Java – один из самых популярных в мире. В 2022 году аналитическая компания RedMonk на основе популярности использования на GitHub и упоминания в обсуждениях на Stack Overflow включила java в десятку самых популярных языков программирования.

Со временем влияние Java не только не уменьшилось, а, наоборот, возросло, в отличие от многих других языков.

«Основная причина успеха Java – его гибкость. Начиная с первой версии, этот язык непрерывно адаптируется к изменениям в среде программирования и подходам к написанию программ. А самое главное – он не просто следует тенденциям в программировании, а помогает их создавать» [3, с. 29].

«Есть еще один важный аспект, касающийся языка Java, на который сразу хочется обратить внимание. Язык Java – полностью объектно-ориентированный язык. Сказанное означает, что для написания даже самой маленькой и самой простой программы придется писать по меньшей мере один класс» [1, с. 11].

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

Действительно, Java – объектно-ориентированный язык, но тем не менее процедурный стиль также применяется при написании программ.

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

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

На листинге 1 представлены классы животных. Они имеют поля: текущий возраст животного (age) и вспомогательные коэффициенты (factor). При этом классы лишены поведения.

 

public class Cat {

   public int age;

   public int factor;

}

 

public class Dog {

   public int age;

   public int factor1;

   public int factor2;

}

 

Листинг 1. Классы животных

 

На листинге 2 представлен класс Counter c поведением классов.

public class Counter {

    public int countAge (Object animal) throws NoSuchAnimalException {

        if (animal instanceof Cat) {

          Cat c = (Cat)animal;

          return c.age + c.factor;

          }

        else if (animal instanceof Dog) {

           Dog d = (Dog)animal;

           return d.factor1 * Math.log(d.age) + d.factor2;

          }

     }

}

Листинг 2. Класс Counter

 

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

Рассмотрим применение объектно-ориентированного стиля программирования в данной ситуации (листинг 3).

 

public class Cat implements Animal {

   public int age;

   public int factor;

 

   public int countAge() {

      return age + factor;

   }

}

 

public class Dog implements Animal {

   public int age;

   public int factor1;

   public int factor2;

 

   public int countAge() {

      return factor1 * Math.log(age) + factor2;

   }

}

 

Листинг 3. Классы животных при объектно-ориентированном стиле

 

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

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

«То, что сложно в объектно-ориентированном программировании, просто в процедурном, а то, что сложно в процедурном программировании, просто в объектно-ориентированном. Опытные программисты хорошо знают, что представление о том, что все данные должны представляться в виде объектов – миф. Иногда предпочтительны простые структуры данных и процедуры, работающие с ними» [2, c. 125].

Таким образом, объектно-ориентированное программирование уместно, когда в сложную систему необходимо включить новые типы данных, а при добавлении большого числа новых функций лучше использовать процедурное программирование.

Список литературы

  1. Васильев, А.Н. Программирование на Java для начинающих / А.Н. Васильев. – Москва: Эксмо, 2017. – 704 с. – (Российский компьютерный бестселлер). – ISBN 978-5-699-89475-8.
  2. Мартин, Р. Чистый код: создание, анализ и рефакторинг. – СПб.: Питер, 2021. – 464 с.: ил.- ISBN 978-5-4461-0960-9.
  3. Шилдт, Г. Java. Полное руководство, 10-е изд.: Пер. с англ. – СПб.: ООО «Диалектика», 2020. – 1488 с.: ил. – Парал. тит. англ. – ISBN 978-5-6040043-6-4.

Предоставляем бесплатную справку о публикации,  препринт статьи — сразу после оплаты.

Прием материалов
c по
Осталось 5 дней до окончания
Размещение электронной версии
Загрузка материалов в elibrary