понедельник, 21 ноября 2011 г.

В чём различие между объектно-ориентированным и системным подходами? Часть 1


Объектно-ориентированный подход – это подход к разработке программ. Он был изобретён Кристеном Нюгордом и Оле-Йоханом Далем при разработке языка Симула-67. Впоследствии многие его концепции были развиты Аланом Кеем и Дэном Ингалссом при работе над языком Smalltalk.

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

Для описания объектов в языках программирования существуют классы. Фактически, класс – это модуль, для которого можно создать экземпляр (или несколько экземпляров). Как и всякий модуль, класс имеет свои интерфейс (открытую часть) и реализацию (закрытую часть). Экземпляр класса является объектом.

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

Системный подход – это подход к:


a)      изучению объектов и явлений;
b)      построению научных теорий и гипотез;
c)      проектированию техники.

Основоположником системного подхода является австрийский биолог Карл Людвиг фон Берталанфи.

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

Любая система имеет назначение, цель, ради которой существует. Эту цель задаёт система более высокого уровня (надсистема), в которую рассматривая система включена, как часть.

Система состоит из множества систем более низкого уровня, которые называются подсистемами. Подсистемы упорядочены внутри системы и образуют её структуру.

Система обладает системным эффектом. Системный эффект – это то, что отличает систему от просто суммы её частей. Системный эффект – это свойство системы, которым обладает система, но не обладают её части. Например, самолёт может летать, а его отдельные части – крылья, фюзеляж, шасси – летать не могут.

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

С точки зрения системы её подсистемы представляют собой "чёрные ящики". Система знает о назначении её отдельных подсистем, но не знает, как они устроены внутри, не знает их структуру.

Системы образуют иерархию уровней:

  1. Над-над-система.
  2. Над-система.
  3. Система.
  4. Под-система.
  5. Под-под-система.

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

  1. Где она расположена?
  2. Как и для чего она используется?

Назначение системы всегда лежит за её пределами.

Если мы хотим понять, как функционирует система, то нам, наоборот, нужно спуститься на уровень ниже – от надсистемы к системе, от назначения системы к её структуре. Хороший инженер (конструктор или изобретатель) никогда не рассматривает систему изолированно – он всегда изучает систему с разных системных уровней: надсистемного, системного, подсистемного.


Современные приложения – это сложные технические системы, которые можно представить в виде иерархии системных уровней:

  1. Код.
  2. Функция.
  3. Объект, класс (группа данных и функций).
  4. Группа взаимодействующих объектов, классов.
  5. Функциональный модуль.
  6. Библиотека.
  7. Набор библиотек.
  8. Программа.
  9. Приложение (набор программ и ресурсов).
  10. И т.д. – наверняка что-то пропустил.

Когда сторонники объектно-ориентированного подхода говорят, что могут с помощью него разработать приложение, то они немножко лукавят. Если посмотреть на приведённую иерархию, то легко увидеть, что объектно-ориентированный подход позволяет разработать системы уровней 3 и 4, т.е. части программ или небольшие программы. Чтобы сконструировать серьёзное приложение, нужно оперировать системами более высокого уровня – функциональными модулями, библиотеками, наборами библиотек и даже отдельными программами.

К сожалению, ряд вопросов остаётся за "скобками" объектно-ориентированного подхода. Например:

  1. Как, оперируя системами высого уровня, проектировать приложения?
  2. Как от систем высокого уровня переходить к классам и объектам?

ЛИТЕРАТУРА:

  1. Объектно-ориентированное программирование.
  2. Симула.
  3. Системный подход.
  4. Г.С. Альтшуллер "Структура талантливого мышления".
  5. С.В. Сычёв, К.А. Лебедев "О потерянном уровне".

Продолжение следует...