Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История и развитие методологии объектно-ориентированного программирования.Сферы применения

Содержание:

ВВЕДЕНИЕ

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

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

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

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

Предмет исследования: специфика методологии объектно-ориентированного программирования.

Цель работы – проанализировать историю и развитие методологии объектно-ориентированного программирования, выделить сферы применения.

Задачи исследования:

1. Обзор исторических предпосылок создания языков и методологий программирования.

2. Проведение классификации специфики языков программирования высокого уровня.

3. Анализ основных принципов и сущности методологии ООП.

4. Анализ возможностей современных языков программирования, которые основаны на реализации ООП парадигмы.

5. Обоснование сферы применения объектно-ориентированного программирования.

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

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

При написании работы использовалась учебная и научно-публицистическая литература отечественных и зарубежных авторов, посвященные рассматриваемой теме, таких как Буч Г., Вольфенгаген В.Э., Казаков П. В., Кирютенко Ю. А., Савельев В. А. , Лаптев В. В. С++, Лафоре Р. , Павловская Т. А. и др.

1. Исторические аспекты возникновения языков программирования

1.1 Исторические предпосылки создания языков программирования и методологий программирования

Прогресс компьютерных технологий определил процесс появления новых разнообразных знаковых систем для записи алгоритмов — языков программирования. Язык программирования — язык (знаковая система), предназначенный для записи компьютерных программ; определяет набор лексических, синтаксических и семантических правил, определяющих внешний вид программы и действия, которые выполнит исполнитель (обычно — ЭВМ) под ее управлением.[1]

Со времени создания первых программируемых машин человечество придумало более 8 тыс. языков программирования (включая нестандартные, визуальные и эзотерические языки).[2] Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты могут владеть десятком и более разных языков программирования.

Язык программирования предназначен для написания компьютерных программ, которые представляют собой набор правил, позволяющих компьютеру выполнить тот или иной вычислительный процесс, организовать управление различными объектами, и т.п.[3] Язык программирования отличается от естественных языков тем, что предназначен для взаимодействия человека с ЭВМ, в то время как естественные языки используются для общения людей между собой.[4]

Большинство языков программирования использует специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.[5]

В период 1960-х—1970-х гг. были разработаны основные парадигмы языков программирования, используемые в настоящее время, хотя во многих аспектах этот процесс представлял собой улучшение идей и концепций, заложенных еще в первых языках третьего поколения:

  • язык APL оказал влияние на функциональное программирование и стал первым языком, поддерживавшим обработку массивов;
  • язык ПЛ/1 (NPL) был разработан в 1960-х гг. как объединение лучших черт Фортрана и Кобола;
  • язык Симула, появившийся примерно в это же время, впервые включал поддержку объектно-ориентированного программирования;
  • в середине 1970-х гг. группа специалистов представила язык Smalltalk, который был уже всецело объектно -ориентированным;
  • в период с 1969 по 1973 гг. велась разработка языка Си, популярного и по сей день, и ставшего основой для множества последующих языков, например, столь популярных, как С++ и Java;
  • в 1972 г. был создан Пролог — наиболее известный (хотя и не первый, далеко не единственный) язык логического программирования;
  • в 1973 г. в языке ML была реализована расширенная система полиморфной типизации, положившая начало типизированным языкам функционального программирования.[6]

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

Кроме того, в 1960—1970-х гг. активно велись споры о необходимости поддержки структурного программирования в тех или иных языках.[7] Голландский специалист Э. Дейкстра выступал в печати с предложениями о полном отказе от использования инструкций GOTO во всех высокоуровневых языках. Развивались также приемы, направленные на сокращение объема программ и повышение продуктивности работы программиста и пользователя.

1.2 Классификация и специфика языков программирования

Существуют различные классификации языков программирования. По наиболее распространенной классификации все языки программирования, в соответствии с тем, в каких терминах необходимо описать задачу, делят на языки низкого и высокого уровня.[8] Если язык близок к естественному языку программирования, то он называется языком высокого уровня, если ближе к машинным командам — языком низкого уровня.

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

Машинно-ориентированные языки — это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ.[9]

К языкам программирования высокого уровня относят Фортран (переводчик формул — был разработан в середине 50-х гг. программистами фирмы IBM и в основ-ном используется для программ, выполняющих естественно-научные и математические расчеты), Алгол, Кобол (коммерческий язык — используется, в первую очередь, для программирования экономических задач), Паскаль, Бейсик (был разработан профессорами Дармутского колледжа — Джоном Кемени и Томасом Курцом), Си (Деннис Ритч — 1972 г.), Пролог (в основе языка лежит аппарат математической логики) и т.д.

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

Существует три вида транслятора: интерпретаторы (это транслятор, который производит пооператорную обработку и выполнение исходного кода программы), компиляторы (преобразует всю программу в модуль на машинном языке, после чего программа записывается в память компьютера и лишь потом исполняется) и ассемблеры (переводят программу, записанную на языке ассемблера, в программу на машинном языке).[11]

Языки программирования также можно разделять на поколения[12]:

  • языки первого поколения: машинно-ориентированные с ручным управлением памяти на компьютерах первого поколения;
  • языки второго поколения: с мнемоническим представлением команд, так называемые автокоды;
  • языки третьего поколения: общего назначения, используемые для создания прикладных программ любого типа. Например, Бейсик, Кобол, Си и Паскаль;
  • языки четвертого поколения: усовершенствованные, разработанные для создания специальных прикладных программ, для управления базами данных;
  • языки программирования пятого поколения: языки декларативные, объектно-ориентированные и визуальные. Например, Пролог, ЛИСП (используется для построения программ с использованием методов искусственного интеллекта), Си++, Visual Basic, Delphi.

Языки программирования также можно классифицировать на процедурные и непроцедурные. В процедурных языках программа явно описывает действия, которые необходимо выполнить, а результат задается только способом получения его при помощи некоторой процедуры, которая представляет собой определенную последовательность действий. Среди процедурных языков выделяют структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д.; в операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада, ПЛ/1. Среди операционных — Фортран, Бейсик, Фокал.[13]

Непроцедурное (декларативное) программирование появилось в начале 70-х гг. XX в.[14] К непроцедурному программированию относятся функциональные и логические языки. В функциональных языках программа описывает вычисление некоторой функции. Обычно эта функция задается как композиция других, более простых, те, в свою очередь, делятся на еще более простые задачи и т.д. Один из основных элементов функциональных языков — рекурсия. Оператора присваивания и циклов в классических функциональных языках нет. В логических языках программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается Пролог. Программа на Прологе содержит, набор предикатов-утверждений, которые образуют проблемно-ориентированную базу данных и правила, имеющие вид условий.

Еще один класс языков программирования — это объектно-ориентированные языки высокого уровня. На таких языках не описывают подробной последовательности действий для решения задачи, хотя они содержат элементы процедурного программирования. Благодаря богатому пользовательскому интерфейсу, они предлагают человеку решить задачу в удобной для него форме.[15] Первый объектно-ориентированный язык программирования Simula был создан в 1960-х гг. Нигаардом и Далом.[16]

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

Первые программисты писали программы посредством использования машинных кодов.[17] В связи со сложностью подобного подхода возникла необходимость создать программу, которая преобразовывала бы написанный человеком и понятный ему текст в машинные коды. Такая программа получила название «компилятор», а используемый для написания исходного текста программы язык — «языком программирования». Первым компилятором был «Assembler». Впоследствии было создано множество различных языков программирования, например: C, ADA, FoxPro, Fortran, Basic, Pascal и другие. Следующей же ступенью развития стало объектно-ориентированное программирование. Появились соответствующие данной парадигме языки, например: C++, Object Pascal. Наблюдалась борьба между скоростью разработки программного обеспечения и скоростью выполнения программного кода.

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

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

Язык Simula, разработанный в 1960-х годах считается общим предком большинства современных объектных и объектно-ориентированных языков.[18] Данный язык дополнил идеи языка ALGOL концепцией инкапсуляции и наследования. На рисунке ниже представлена генеалогия наиболее значимых и популярных объектных и объектно-ориентированных языков программирования, где интенсивность разработки языка показана длиной прямоугольника, а стрелочки отображают влияние одних языков на другие.

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

2. Методология объектно-ориентированного программирования в современных языках программирования

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

Причиной и основой любой методологии программирования является то, что практически полезные программы имеют размер и функциональность, необозримые для одного человека, и, как следствие, требуют координированных усилий группы людей, работающих над обозримыми частями программ. Различные способы выделения этих частей (декомпозиции программы) и описания правил их взаимодействия между собой (их интерфейсов) и составляют сущность различных методологий программирования.[19]

ООП — это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости.[20]

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

Парадигма объектно-ориентированного программирования [1] предполагает, что любая программная система проектируется как совокупность объектов. При этом объекты должны быть организованы таким образом, чтобы программист мог легко изменять их по мере того, как изменяются требования к программе. Как правило, использование изолированных объектов не позволяет достичь поставленной цели. Интерес представляет взаимодействие объектов, т.е. обмен информацией между объектами. Обычно говорят, что один объект взаимодействует с другим посредством сообщений, т.е. в процессе взаимодействия объекты обмениваются сообщениями. Сообщение – это вызов метода. Совместное использование методов различных объектов – показатель взаимодействия объектов. Таким образом, методы одного объекта должны вызывать методы других объектов. В этом случае ни один метод, участвующий во взаимодействии, не может достигнуть цели самостоятельно. Именно поэтому так важно правильно организовать обмен информацией между методами различных объектов. Такой обмен предполагает, что результаты работы метода одного объекта являются исходными данными для метода другого объекта. Если объект Object2 посылает сообщение объекту Object1, то это означает, что объект Object2 вызывает метод объекта Object1.

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

Объект – это сущность, которой можно посылать сообщения, и которая может на них реагировать, используя свои данные. Данные объекта скрыты от остальной программы. Сокрытие данных называется инкапсуляцией. Наличие инкапсуляции достаточно для объектности языка программирования, но еще не означает его объектной ориентированности – для этого требуется наличие наследования. Но даже наличие инкапсуляции и наследования не делает язык программирования в полной мере объектным с точки зрения ООП.

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

Рассмотрим основные понятия ООП.

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

Класс содержит константы и переменные, называемые полями, а также выполняемые над ними операции и функции. Функции класса называются методами (другое название — функции-члены). Предполагается, что доступ к полям класса возможен только через вызов соответствующих методов. Поля и методы являются элементами (членами) класса.

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

Класс это «Совокупность свойств, методов и событий». При этом «совокупность» означает, что функционирование класса обеспечивается в совокупности методами, свойствами и событиями.[21]

Абстрагирование – это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция – это набор всех таких характеристик.

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

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

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

Наследование (или наследственность) — определение объекта и его дальнейшее использование для построения иерархии порожденных объектов с возможностью для каждого порожденного объекта, относящегося к иерархии, доступа к коду и данным всех порождающих объектов.[22] Существует и иное определение данного термина: «Наследование — механизм получения нового класса из существующего путем его дополнения или изменения».[23]

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

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

Наследственность в ООП — это его основа.[25] Следует понимать, что потомок — класс, от которого происходят другие классы, наследует свойства предка — класса, который происходит либо порожден из другого класса. Следовательно, потомок всегда «знает», какими он обладает свойствами, а предок не может «знать» свойства своего потомка, поскольку не может «знать» те свойства, которые будут добавлены в новый класс. Данный метод наследования и принят в объектно-ориентированных языках.

Именно наследование дает возможность повторно использовать уже существующий код.[26] С целью применения существующего кода, программист создает новый класс на базе уже существующих классов. В итоге, наследование выполняет две функции: предотвращение дублирования кода, развитие работы в нужном направлении. Отношения между родительскими классами и его потомками именуется термином «Иерархия наследования».

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Под полиморфизмом подразумевается свойство родственных объектов решать схожие по смыслу проблемы разными способами.[27] Например, действие «бежать» свойственно большинству животных. Но каждое из них действует различным образом.

Полиморфизм — присваивание действию одного имени, которое затем совместно используется вниз и вверх по иерархии объектов, причем каждый объект иерархии выполняет это действие способом, именно ему подходящим.[28] «Полиморфизм» представляет собой способность обладать несколькими формами.[29] В объектно-ориентированной разработке это относится к сущностям (элементам структур данных), способным в процессе выполнения присоединяться к объектам разных типов.

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

Касательно средств, которые связаны с возможностью реализации полиморфизма, то следует упомянуть следующие виды методов в ООП:

  1. Статические методы класса включаются в код программы в процессе ее компиляции. Таким образом, до запуска программы уже известно, какая процедура будет вызвана в определенной точке.
  2. Виртуальные методы, которые подключаются к основному коду на этапе выполнения программы и дают возможность определить тип и конкретизировать экземпляр объекта в процессе исполнения, а затем вызвать методы этого объекта. Данный механизм обеспечивает полиморфизм и именуется также поздним связыванием.[30]

Фленов М. Е. объясняет возможность полиморфизма на примере гаража, потомком которого выступает дом: «Представим, что у гаража дверь открывается вверх, а у дома должна открываться в сторону. Дом происходит от гаража, поэтому у него дверь будет открываться тоже вверх. Как тогда быть? Вы просто должны изменить (переписать) у дома процедуру, отвечающую за открытие двери. Тогда дом получит все свойства гаража, но при открывании двери подставит свою процедуру».[31] Иначе говоря, полиморфизм — различная реакция объектов разных иерархий на одно и то же событие.

Полиморфизм дает возможность создавать множественные определения для операций и функций. Какое именно определение будет использоваться, зависит от контекста программы. ООП предоставляет возможности, связанные с полиморфизмом, такие как: шаблоны функций, перегрузка функций, перегрузка операций, использование виртуальных методов, шаблоны классов.[32] Перегрузка операций позволяет применять для собственных классов те же операции, что используются для встроенных типов C++. Виртуальные методы обеспечивают возможность выбрать на этапе выполнения нужный метод среди одноименных методов базового и производного классов. Шаблоны классов позволяют описать классы, инвариантные относительно типов данных.

Класс является описываемой на языке терминологии (пространства имен) исходного кода моделью еще не существующей сущности (объекта).

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

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

Под объектом, согласно Фленову М. Е., понимается экземпляр класса. Объект функционирует как единое целое, реагируя соответствующими методами на соответствующие события класса.[34] Разница между понятиями объекта и класса заключается в том, что посредством класса осуществляется описание какой-либо сущности, что работает как шаблон, основа. Например, в случае с Delphi, для того, чтобы добавить на форму кнопку, следует объявить класс, описать свойства, методы и события, и, при переносе кнопки на форму, создается экземпляр этой кнопки, т.е. объект.

Немаловажно, что каждый класс должен включать в себя два обязательных метода: создать объект (конструктор), уничтожить объект (деструктор), а процесс создания объекта именуется инициализацией.[35] Эти методы выделяют под свойства объекта память и освобождают ее, а также заполняют свойства значениями по умолчанию.

Существует так называемые права доступа, в зависимости от которых методы и классы видны другим классам. В Delphi, например, это public, private, protected, published. Открытыми для доступа должны быть лишь некоторые возможности класса.

Роль классов в ООП заключается в том, что они выполняют две функции, всегда разделенные до появления объектно-ориентированных технологий: класс — это одновременно и модуль и тип.[36]

Под модулями понимаются структурные единицы, из которых состоит программа. Поскольку модуль всегда рассматривается как синтаксическая концепция, то разбиение на них влияет только на форму записи исходных кодов, не определяя их функциональность. Тип — это статистическое описание определенных динамических объектов — элементов данных, обрабатываемых в процессе выполнения программы.[37]

Одним из важнейших достижений в области ООП является методология паттернов проектирования, иногда называемых шаблонами проектирования [6, с. 202].[38]

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

2.2 Анализ современных языков программирования, базирующихся на методологии ООП

В наше время количество прикладных языков программирования, реализующих парадигму ООП превышает количество языков, реализующих иные парадигмы. Наиболее популярные языки программирования (С++, Delphi, C#, Java и др.) воплощают объектную модель Симулы. Примерами языков, базирующихся на модели Smalltalk, являются Python и Ruby.

Также выделяются объектные языки, к которым относят те, которые обеспечивают абстракцию данных и создание классов. К объектно-ориентированным же языкам относятся объектные языки, поддерживающие наследование и полиморфизм.[39]

Итак, средством программирования выступает один из объектно-ориентированных языков программирования. Язык программирования называется объектно-ориентированным, если:

  • есть поддержка объектов как абстрактных данных, имеющих интерфейсную часть в виде поименованных операций, и защищенную область локальных данных;
  • все объекты относятся к соответствующим типам;
  • структура и поведение объектов могут наследоваться.[40]

Объектно-ориентированные языки программирования иногда делят на «чистые» (Смолток, Java, SELF), и «гибридные», выросшие из ранее существовавших процедурных языков (Ада 95, C++). К «чистым» относят те языки, в которых все данные хранятся как объекты, размещаемые с автоматическим выделением и освобождением памяти.

SIMULA 67

Все объектно-ориентированные языки происходят от языка Симула, разработанного в начале 60-х гг. в Norwegian Computing Centre. Синтаксис языка взят из Алгола-60. Основными новшествами были понятия объекта, класса и наследования. Авторы этого языка очень точно угадали перспективы развития программирования: их язык намного опередил свое время.

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

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

Сформированная в 1972 г. организация Simula Standards Group осуществляет контроль за развитием языка: самая последняя версия была выпущена в 1986г. Изменения в язык вносит Simula Developement Group. Кроме того, есть ассоциация пользователей языка Simula.

SMALLTALK

Язык Smalltalk был разработан командой Xerox Palo Alto Research Center Learning Research Group как программная часть Dynabook – фантастического проекта Алана Кея. В основу были положены идеи Simula.. Smalltalk является одновременно и языком программирования, и средой разработки программ.[41]

Это чисто объектно-ориентированный язык, в котором абсолютно все рассматривается как объекты; даже целые числа - это классы. Вслед за Simula, Smalltalk является важнейшим объектно-ориентированным языком, поскольку он не только оказал влияние на последующие поколения языков программирования, но и заложил основы современного графического интерфейса пользователя, на которых непосредственно базируются интерфейсы Macintosh, Windows и Motif.

Известны пять выпусков языка Smalltalk, обозначаемых по году их появления: Smalltalk-72, -74. -76, -78, -80. Реализации 1972 и 1974 годов заложили основу языка, в частности идею передачи сообщений и полиморфизм, хотя механизм наследования еще не появился. В последующих версиях полноправное гражданство получили классы; этим достигла завершения точка зрения, что все состоит из объектов. Smalltalk-80 был перенесен на многие компьютерные платформы. В основу языка положены в идеи:

  • данные хранятся как объекты, которые освобождаются автоматически;
  • выполнение действий осуществляется через посылку сообщений объектам;
  • поведение объектов описано в классах.[42]

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

C++

Язык программирования C++ был разработан Бьерном Страуструпом, сотрудником AT&T Bell Laboratories. Непосредственным предшественником C++ является С with Classes, созданный тем же автором в 1980 году. [43]

Язык С++ в основном является языком Си со специальными синтаксическими расширениями для определения и управления объектами. В нем был учтен ряд недостатков языка Си: теперь ведется проверка типов аргументов функций, можно производить макроподстановку функций. Также в него включены некоторые средства проекта стандарта Ansi C. По завершении стандарта C++ будет пересмотрен для удаления несовместимостей двух языков. Важной новой особенностью C++ является поддержка абстракции данных и объектно-ориентированного программирования. Абстракция данных поддерживается с помощью введения типов, определенных пользователем. [44]

С++ - это язык программирования, а не среда разработки программ типа Smalltalk. Поэтому ему нужны средства поддержки работы программиста: сюда входят расширения существующих средств языки Си (редакторы, отладчики) и средства поддержки работы с объектами (окна просмотра классов). В свою очередь, эти средства должны соединяться со средой программирования.[45]

Common Lisp Object System (CLOS)

В начале 80-х годов под воздействием идей объектно-ориентированного программирования возникла серия новых диалектов Lisp, многие из которых были ориентированы на представление знаний. Objective-C - это гибридный язык, состоящий из подмножества Ansi C и основных положений Smalltalk-80. Тексты программ могут содержать чистые операторы языка Си или объектно-ориентированные конструкции. Объекты задаются новым типом данных, называемым id. Сообщения посылаются объектам с помощью модифицированной версии синтаксиса языка Smalltalk. Новые объекты создаются посылкой сообщения new специальному типу объекта, называемому объектом-производителем.

CLOS должен:

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

Ada

В 1983 году под эгидой Министерства Обороны США был создан язык Ada. Язык замечателен тем, что очень много ошибок может быть выявлено на этапе компиляции.

Кроме того, поддерживаются многие аспекты программирования, которые часто отдаются на откуп операционной системе (параллелизм, обработка исключений). В 1995 году был принят стандарт языка Ada 95, который развивает предыдущую версию, добавляя в нее объекно-ориентированность и исправляя некоторые неточности.

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

  • надежности и эксплуатационных качествах программ;
  • программировании как разновидности человеческой деятельности;
  • эффективности. [46]

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

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

Eiffel

Автор Eiffel Бертран Мейер (Bertrand Meyer) создавал не только язык объектно-ориентированного программирование, но и инструмент проектирования программ. Несмотря на сильное влияние Simula, Eiffel - вполне самостоятельный объектно-ориентированный язык со своей собственной средой разработки.

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

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

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

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

Object Pascal

Object Pascal - это объектно-ориентированное расширение Паскаля, разработанное Н. Виртом совместно с командой с фирмы Apple. Классы (типы) реализованы как расширение паскалевской структуры RECORD. В Object Pascal они могут содержать как поля данных, так и поля методов.

Методы определяются как процедуры или функции Паскаля, определяемые по имени класса. Сообщения посылаются с помощью обычных конструкций Паскаля для определения поля. Object Pascal использовался для внутренних разработок фирмы Apple. Библиотека классов Object Pascal составляет основу интегрированной системы разработки прикладных программ MacApp.

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

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

3. Сферы применения объектно-ориентированного программирования

Говоря о программировании в Интернете, часто имеют в виду создание публикаций с использованием языка разметки гипертекстовых документов — HTML. Применение специальных средств (HTML-редакторов) позволяет не только создавать отдельные динамически изменяющиеся интерактивные HTML-документы, используя при этом данные мультимедиа, но и редактировать целые сайты.

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

  • назначение разрабатываемого программного обеспечения, т.е. необходимость в нем будет временная или оно будет использоваться постоянно, будет ли оно в дальнейшем передаваться другим организациям, будут ли создаваться его новые версии;
  • необходимая скорость работы программного обеспечения, соотношение и работа его вычислительных и диалоговых компонентов;
  • предполагаемый размер программы, т.е. создавать ее как единое целое, или она будет в виде отдельных взаимодействующих модулей, нужно ли минимизировать размер памяти, которую занимает программа во время работы;
  • возможность сопряжения разрабатываемого программного обеспечения с другими приложениями (пакетами или программами), включая приложения, составленные на иных языках программирования;
  • основные типы данных, которыми придется оперировать, возможность поддержки работы с различными типами структур;
  • характер и уровень использования периферийных средств (монитора, клавиатуры и др.), необходимость в специальном программировании некоторых функций, чтобы работать с периферийными устройствами;
  • целесообразность и возможность применения имеющихся стандартных библиотек подпрограмм, процедур, функций.[47]

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

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

Помимо гибкости объектно-ориентированный подход к построению систем программного обеспечения имеет много других преимуществ. Поскольку структура программного обеспечения отражает реальный мир, он позволяет размышлять о задаче в терминах реально существующих объектов системы, а не в терминах языка программирования. Такое изменение процесса мышления становится возможным, так как теперь можно определять новые типы данных, описывая с их помощью реальные объекты. В будущем программистам будет много легче понять и изменить построенные таким образом программы, даже если и не они их создавали. C другой стороны, основные операции, заложенные в программное обеспечение, имеют тенденцию изменяться намного медленнее, чем информационные потребности определенных групп людей или учреждений. Это означает, что программное обеспечение, основанное на общих моделях будет существовать и успешно работать намного дольше, чем то, которое написано для решения определенной, сиюминутной проблемы.[48]

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

ЗАКЛЮЧЕНИЕ

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

Основными понятиями ООП являются: класс, объект, метод, свойство, поле, наследование, полиморфизм, инкапсуляция, права доступа.

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

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

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. Бертран М. Основы объектно-ориентированного программирования [Электронный ресурс] / Бертран М. — Электронное издательство «Интернет-университет информационных технологий — ИНТУИТ.ру», 2005 г.
  2. Бьянкуцци Ф., Уорден Ш. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования. Научно-популярное издание. — Пер. С. Маккавеева. — СПб.: Символ-Плюс, 2010 — 608 с.
  3. Буч Г., Максимчук Р. А., Энгл М. У., Янг Б. Дж., Коналлен Д., Хьюстон К. А. Объектно-ориентированный анализ и проектирование с примерами приложений [Текст] / Г. Буч, Р. А. Максимчук, М. У. Энгл, Б. Дж. Янг, Д. Коналлен, К. А. Хьюстон. — 3-е изд. — М.: ООО «И. Д. Вильямс», 2008. — 720 с.
  4. Вольфенгаген В.Э. Конструкции языков программирования. Приемы описания. - М.: АО "Центр ЮрИнфоР", 2001. - 276 с.
  5. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.
  6. Кирютенко Ю. А., Савельев В. А. Объектно-ориентированное программирование: Язык Smalltalk — Москва: «Вузовская книга», 2003. — 358 с.
  7. Лаптев В. В. С++. Объектно-ориентированное программирование: Учебное пособие [Текст] / В. В. Лаптев. — СПб.: Питер. 2008. — 464 с.
  8. Лафоре Р. Объектно-ориентированное программирование в C++ [Текст] / Р. Лафоре. — 4-е изд. — СПб.: Питер, 2004. — 928 с.
  9. Медведев В. И. Особенности объектно-ориентированного программирования на C++/CLI, C# и Java. [Текст] / В. И. Медведев. — 2-е изд., испр. и доп. — Казань: РИЦ «Школа», 2010. — 444 c.
  10. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование: Практикум [Текст] / Т. А. Павловская, Ю. А. Щупак. — СПб.: Питер, 2011. — 352 с.
  11. Паронджанов В. Д. Как улучшить работу ума: Алгоритмы без программистов — это очень просто! — М.: Дело, 2001 – 360 с.
  12. Программирование. ООП в Pascal-Паскаль [Электронный ресурс] // Pascal-Паскаль: Исходники Программирование Pascal-Паскаль. — URL: http://www.pascal.helpov.net/index/object-oriented_programming_pascal_programming#pascal-oop_8 (дата обращения: 15.10.2017).
  13. Радченко Г.И. Объектно-ориентированное программирование / Г.И. Радченко, Е.А. Захаров. Челябинск: Издательский центр ЮУрГУ, 2013. - 167 с.
  14. Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. — 672 с.
  15. Страуструп, Б. Язык программирования С++. Специальное издание. Пер. с англ. / Б. Страуструп // СПб., М.: «Невский диалект» – «Издательство БИНОМ», 2008 г. – 1104 с.
  16. Фленов М. Е. Библия Delphi [Текст] / М. Е. Фленов. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. — 688 с.
  17. Хорев П.Б. Объектно-ориентированное программирование. Учебное пособие для студ. учреждений высш. проф. образования. — 3-е изд., испр. — М.: Академия, 2011. — 448 с.
  18. Borland Pascal. Руководство пользователя: Глава 9. Объектно-ориентированное программирование [Электронный ресурс] // Библиотека on-line. — URL: http://citforum.ru/programming/bp70_ug/bp70ug_09.shtml (дата обращения: 14.10.2017).
  1. 1. Лафоре Р. Объектно-ориентированное программирование в C++ [Текст] / Р. Лафоре. — 4-е изд. — СПб.: Питер, 2004. С.5

  2. Бьянкуцци Ф., Уорден Ш. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования. Научно-популярное издание. — Пер. С. Маккавеева. — СПб.: Символ-Плюс, 2010 . С.46

  3. Паронджанов В. Д. Как улучшить работу ума: Алгоритмы без программистов — это очень просто! — М.: Дело, 2001. С.25

  4. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  5. Хорев П.Б. Объектно-ориентированное программирование. Учебное пособие для студ. учреждений высш. проф. образования. — 3-е изд., испр. — М.: Академия, 2011. С.5

  6. Бьянкуцци Ф., Уорден Ш. Пионеры программирования. Диалоги с создателями наиболее популярных языков программирования. Научно-популярное издание. — Пер. С. Маккавеева. — СПб.: Символ-Плюс, 2010 . С.54

  7. Вольфенгаген В.Э. Конструкции языков программирования. Приемы описания. - М.: АО "Центр ЮрИнфоР", 2001. С.120

  8. Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. С.330

  9. Хорев П.Б. Объектно-ориентированное программирование. Учебное пособие для студ. учреждений высш. проф. образования. — 3-е изд., испр. — М.: Академия, 2011. С.3

  10. Хорев П.Б. Объектно-ориентированное программирование. Учебное пособие для студ. учреждений высш. проф. образования. — 3-е изд., испр. — М.: Академия, 2011. С.10

  11. Вольфенгаген В.Э. Конструкции языков программирования. Приемы описания. - М.: АО "Центр ЮрИнфоР", 2001. С.114

  12. Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. — 5-е изд. — М.: Вильямс, 2001. С.112

  13. Хорев П.Б. Объектно-ориентированное программирование. Учебное пособие для студ. учреждений высш. проф. образования. — 3-е изд., испр. — М.: Академия, 2011.С.15

  14. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  15. Паронджанов В. Д. Как улучшить работу ума: Алгоритмы без программистов — это очень просто! — М.: Дело, 2001. С.40

  16. Хорев П.Б. Объектно-ориентированное программирование. Учебное пособие для студ. учреждений высш. проф. образования. — 3-е изд., испр. — М.: Академия, 2011. С.120

  17. Фленов М. Е. Библия Delphi [Текст] / М. Е. Фленов. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. С.11

  18. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  19. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  20. Программирование. ООП в Pascal-Паскаль [Электронный ресурс] // Pascal-Паскаль: Исходники Программирование Pascal-Паскаль. — URL: http://www.pascal.helpov.net/index/object-oriented_programming_pascal_programming#pascal-oop_8 (дата обращения: 15.10.2017).

  21. Фленов М. Е. Библия Delphi [Текст] / М. Е. Фленов. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. С.43

  22. Borland Pascal. Руководство пользователя: Глава 9. Объектно-ориентированное программирование [Электронный ресурс] // Библиотека on-line. — URL: http://citforum.ru/programming/bp70_ug/bp70ug_09.shtml (дата обращения: 15.10.2017).

  23. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование: Практикум [Текст] / Т. А. Павловская, Ю. А. Щупак. — СПб.: Питер, 2011. — 352 с.

  24. Программирование. ООП в Pascal-Паскаль [Электронный ресурс] // Pascal-Паскаль: Исходники Программирование Pascal-Паскаль. — URL: http://www.pascal.helpov.net/index/object-oriented_programming_pascal_programming#pascal-oop_8 (дата обращения: 15.10.2017).

  25. Фленов М. Е. Библия Delphi [Текст] / М. Е. Фленов. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. С.49

  26. Лаптев В. В. С++. Объектно-ориентированное программирование: Учебное пособие [Текст] / В. В. Лаптев. — СПб.: Питер. 2008. С.207

  27. Программирование. ООП в Pascal-Паскаль [Электронный ресурс] // Pascal-Паскаль: Исходники Программирование Pascal-Паскаль. — URL: http://www.pascal.helpov.net/index/object-oriented_programming_pascal_programming#pascal-oop_8 (дата обращения: 15.10.2017).

  28. Borland Pascal. Руководство пользователя: Глава 9. Объектно-ориентированное программирование [Электронный ресурс] // Библиотека on-line. — URL: http://citforum.ru/programming/bp70_ug/bp70ug_09.shtml (дата обращения: 15.10.2017).

  29. Бертран М. Основы объектно-ориентированного программирования [Электронный ресурс] / Бертран М. — Электронное издательство «Интернет-университет информационных технологий — ИНТУИТ.ру», 2005 г.

  30. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  31. Фленов М. Е. Библия Delphi [Текст] / М. Е. Фленов. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. С.50

  32. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование: Практикум [Текст] / Т. А. Павловская, Ю. А. Щупак. — СПб.: Питер, 2011. С.163

  33. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  34. Фленов М. Е. Библия Delphi [Текст] / М. Е. Фленов. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2011. С.5

  35. Там же. С.45

  36. Бертран М. Основы объектно-ориентированного программирования [Электронный ресурс] / Бертран М. — Электронное издательство «Интернет-университет информационных технологий — ИНТУИТ.ру», 2005 г.

  37. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  38. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование: Практикум [Текст] / Т. А. Павловская, Ю. А. Щупак. — СПб.: Питер, 2011. С.202

  39. Буч Г., Максимчук Р. А., Энгл М. У., Янг Б. Дж., Коналлен Д., Хьюстон К. А. Объектно-ориентированный анализ и проектирование с примерами приложений [Текст] / Г. Буч, Р. А. Максимчук, М. У. Энгл, Б. Дж. Янг, Д. Коналлен, К. А. Хьюстон. — 3-е изд. — М.: ООО «И. Д. Вильямс», 2008. — 720 с.

  40. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  41. Кирютенко Ю. А., Савельев В. А. Объектно-ориентированное программирование: Язык Smalltalk — Москва: «Вузовская книга», 2003. — 358 с.

  42. Кирютенко Ю. А., Савельев В. А. Объектно-ориентированное программирование: Язык Smalltalk — Москва: «Вузовская книга», 2003. — 358 с.

  43. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование: Практикум [Текст] / Т. А. Павловская, Ю. А. Щупак. — СПб.: Питер, 2011. — 352 с.

  44. Павловская Т. А., Щупак Ю. А. C/C++. Структурное и объектно-ориентированное программирование: Практикум [Текст] / Т. А. Павловская, Ю. А. Щупак. — СПб.: Питер, 2011. — 352 с.

  45. Лаптев В. В. С++. Объектно-ориентированное программирование: Учебное пособие [Текст] / В. В. Лаптев. — СПб.: Питер. 2008. — 464 с.

  46. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.

  47. Лаптев В. В. С++. Объектно-ориентированное программирование: Учебное пособие [Текст] / В. В. Лаптев. — СПб.: Питер. 2008. С.120

  48. Казаков П. В. Объектно-ориентированное программирование : учеб. пособие / П. В. Казаков ; Федер. агентство по образованию ; Брян. гос. техн. ун-т. - Брянск : Изд-во БГТУ, 2005 (Брянск : Лаб. ОП БГТУ). - 114 с.