Файл: Основные структуры алгаритмов:сравнительный анализ и примеры их использования.pdf

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

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

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

Добавлен: 02.04.2023

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

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

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

Введение

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

Принцип управления сложными системами известен еще со времен Древнего Рима - divide et impera (разделяй и властвуй). При проектировании сложных программных систем необходимо ее разделять на все меньшие и меньшие подсистемы, каждую из которых можно создать и совершенствовать независимо. Такой процесс называется декомпозиция.

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

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

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


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

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

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

Задачи работы – изучить:

Основные определения ООП

Историю ООП

Сферу применения ООП

Глава 1. Основные определения ООП

Технология программирования - это набор правил, приемов и методов, которые помогут программисту представить себе реальные вещи абстрактными, чтобы затем "запечателеть" их в тексте на каком-либо языке программирования. Формализовать, описать и промоделировать процессы и явления реального мира [3]. 

Парадигма - набор правил и принципов для анализа явления или задачи, проектирования программы и непосредственно ее реализации на языке. Парадигма - это "взгляд на мир".

Объектно-ориентированное программирование (как расшифровывается ООП) – это, прежде всего, парадигма программирования.

Парадигма программирования определяет то, как программист видит выполнение программы.

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


Определение Гради Буча гласит: “Объектно-ориентированное программирование – это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса (типа особого вида), а классы образуют иерархию на принципах наследуемости”.

Структурное и объектно-ориентированное программирование строятся на таком научном методе как декомпозиция — метод, который использует структуру задачи и позволяет разбить решение общей большой задачи на решение последовательности меньших задач. Декомпозиция ООП происходит не по алгоритмам, а по объектам, использующимся при решении задачи. Данная декомпозиция уменьшает размер программных систем благодаря повторному использованию общих механизмов. Известно, что системы визуального программирования или системы, построенные на принципах объектно-ориентированного программирования, являются более гибкими и легче эволюционируют со временем [6].

Объектно-ориентированный анализ выполняется на основе определенного набора принципов:

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

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

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

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

Параллелизм - организация жизни и взаимодействия объектов.

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


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

Глава 2 История развития ООП

2.1  60-е - бурный расцвет языков высокого уровня

60-е годы ознаменованы бурным развитием языков программирования высокого уровня:

АЛГОЛ 60, АЛГОЛ 68

ФОРТРАН;

КОБОЛ

Simula-67 - первый в мире объектно-ориентированный язык программирования

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

В конце 60-х появляется разработанный сотрудниками Норвежского Вычислительного Центра (Осло) Кристеном Нюгором и Уле-Йоханом Далем для моделирования сложных систем первый в мире объектно-ориентированный язык программирования Simula-67.

История развития ООП берет свое начало в конце 60-х годов. Первым объектно-ориентированным языком был язык программирования Simula, созданный в компьютерном центре в Норвегии. Язык предназначался для моделирования ситуаций реального мира. Особенностью Simula было то, что программа, написанная на языке, была организована по объектам программирования. Объекты имели инструкции, называемые методами, и данные, которые назывались переменными; методы и данные определяли поведение объекта. В процессе моделирования объект вел себя согласно своему стандартному поведению и, в случае необходимости, изменял данные для отражения влияния назначенного ему действия [6].

Этот язык в значительной степени опередил своё время, программисты 60-х годов оказались не готовы воспринять все ценности нового подхода к разработке программ, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran). Прохладному отношению к языку Simula 67 способствовало и то обстоятельство, что его реализация была весьма неэффективна, не в последнюю очередь из-за использования сборки мусора. Тем не менее, этот язык активно использовался в образовательном процессе в высших учебных заведениях. В современной терминологии Simula 67 можно охарактеризовать как объектное расширение Algol 60.


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

2.2 70-е - зарождение технологии программирования

Начало 1970-х ознаменовалось рождением трёх языков, роль которых в развитии современного программирования переоценить тяжело:

Pascal (Никлаус Вирт, 1970; ETH, Швейцария),

C (Кен Томпсон иДеннис Ритчи, 1971; AT&T Bell Labs, США)

Smalltalk (произносится [смо'лток]) (Алан Кей, 1972; Xerox PARC, США).

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

Зародилась и стала интенсивно развиваться технология программирования: обоснование и широкое внедрение нисходящей разработки (так называемого подхода «сверху-вниз») и структурного программирования, развитие типов данных и модульного программирования, исследование проблем обеспечения надёжности и мобильности программ, создание методики управления их коллективной разработки, появление средств поддержки технологии программирования [4].

Язык Smalltalk был создан группой исследователей возглавляемой Аланом Кэйем в исследовательском центре Xerox PARC. Первая реализация, известная как Smalltalk-71, была создана за несколько месяцев как результат спора о том что язык программирования, основанный на идее посылки сообщений, подсказанной Симулой, должен реализовываться на «странице кода». Более поздняя версия, действительно использованная для исследовательской работы, известна сейчас как Smalltalk-72. Его синтаксис и модель исполнения сильно отличались от современного Smalltalk, настолько, что его надо рассматривать как другой язык. После существенных переработок, которые зафиксировали несколько сторон семантики выполнения для увеличения эффективности, была создана версия известная как Smalltalk-76. В этой версии добавились наследование, синтаксис более близкий к Smalltalk-80, и среда разработки включающую большинство инструментов знакомых сейчас Smalltalk-ерам. В Smalltalk-80 были добавлены метаклассы, что делало фразу «всё — объекты» истинной путём связывания с индивидуальными классами свойств и поведения (например, поддержки различных способов создания экземпляров). Smalltalk-80 был первой версией, доступной за пределами PARC — сначала как Smalltalk-80 Version 1, розданный небольшому количеству компаний и университетов для «экспертной оценки». Позже, в 1983 году, были выпущены общедоступная реализация, известная как Smalltalk-80 Version 2 — в виде образа (независимый от платформы файл, содержащий объекты) и спецификации виртуальной машины. Сейчас существует две реализации Smalltalk, являющиеся прямыми потомками Smalltalk-80 — Squeak и VisualWorks.