Файл: Применение объектно- ориентированного подхода при проектировании информационной системы.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 04.04.2023

Просмотров: 57

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

В коротких методах легче разобраться, но код для обработки сообщения иногда рассредоточен по множеству маленьких методов.

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

  1. Недостатки ООП

Некоторые программисты говорят, что объектно-ориентированное программирование является менее эффективным подходом, по сравнению с другими.

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

О недостатках объектно-ориентированного программирования, по порядку:

  • Неэффективность на этапе выполнения. Разберем на примере Smalltalk. В данном языке сообщения интерпретируются в процессе выполнения программы путем осуществления поиска их в одной или нескольких таблиц за счет выбора модуля, который подходит больше всего. Это все тормозит работу системы и ее модулей. Если сравнивать оптимизированную Smalltalk программу, с оптимизированной программой, построенной на C (Си), то вторая будет выполнять поставленную задачу гораздо быстрее.

Есть еще один фактор, который увеличивает время выполнения – абстракция данных. Абстракция запрещает непосредственный доступ к полям класса и требует, чтобы каждая операция над данными производилась при помощи методов. Данная схема приводит к необходимости выполнения вызова процедура при каждом обращении к данным. В том случае, если абстракция используется только там, где она действительно необходима, то замедление выполнения процесса будет приемлемым.


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

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

Еще один подход – дать возможность удаления лишних методов компоновщику. К счастью интеллектуальные компоновщики уже доступны в ряде популярных языков программирования ООП и операционных систем (Windows, Linux, MacOS).

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

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

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

  1. Будущее объектно-ориентированного программирования

Какое же будущее будет у объектно-ориентированного программирования? Это достаточно интересный вопрос, который требует внимания.

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


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

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

Глава 2. Использование объектно-ориентированного подхода на практике

2.1 Языки, используемые в объектно-ориентированном программировании

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

      1. Java

Данный язык программирования является сильно типизированным объектно-ориентированным языком программирования, который был разработан компанией Sun Microsystems.

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

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

Как было сказано ранее, программы на Java транслируются в байт-код Java, который соответственно выполняется на виртуальной машине Java ( сокращенно JVM) – программой обрабатывающей байтовый код и передающей инструкции оборудованию, как интерпретатор.


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

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

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

Актуальной версией Java на текущий момент является версия Java SE 11.

      1. Perl

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

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

Общую структуру своего синтаксиса и структуру построения выражений Perl берет от языка C (Си)

Основной особенностью языка считаются его богатые возможности для работы с текстовыми данными, в том числе с регулярными выражениями. Им было унаследовано множество свойств от языков C, AWK, а также скриптовых оболочек UNIX.

В последних версиях Perl была добавлена поддержка работы со сложными типами данных, первоклассными функциями и объективная модель.

Во всех версиях Perl присутствует автоматическая типизация данных и возможность автоматического контроля над памятью.

      1. Phyton

Одним из самых популярных языков объектно-ориентированного программирования также является язык программирования Phyton.

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


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

Разработка Phyton была начата в конце 1980-х годов, сотрудником голландского института CWI Гвидо ван Россумом. Для распределённой ОС Amoeba требовался расширяемый скриптовый язык, и Гвидо начал писать Python на досуге, позаимствовав некоторые наработки для языка ABC (Гвидо участвовал в разработке этого языка, ориентированного на обучение программированию). В феврале 1991 года Гвидо опубликовал исходный текст в группе новостей alt.sources. С самого начала Python проектировался как объектно-ориентированный язык.

Для разработки данного языка программирования были позаимствованы некоторые особенности таких языков как: ABC, Modula-3, C, Smalltalk, Lisp, Fortran, Miranda, Java, Icon.

За счет того, что данный язык продуктивно развивается, он работает практически на всех платформах, в том числе и мобильных.

Помимо огромной кроссплатформенности данного языка, он очень активно дорабатывается, что позволяет производить большее количество разработок на данном языке.

      1. Smalltalk

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

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

Smalltalk был разработан компанией Xerox PARC в 1970-х годах. Некоторые программисты считают, что Smalltalk является про-родителем объектно-ориентированного программирования.

Среди основных идей Smalltalk, выделяеют следующие идеи:

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