Лекция №1. Введение




НазваниеЛекция №1. Введение
страница1/8
Дата публикации25.02.2013
Размер0.85 Mb.
ТипЛекция
litcey.ru > Информатика > Лекция
  1   2   3   4   5   6   7   8
Лекция №1. Введение.
Объектно – ориентированное программирование представляет собой новую технологию программирования, основанную на высоком уровне абстракции и модульности. Другое название этой технологии – программирование в классах. Все современные системы программирования основаны на применении этой технологии. Наиболее широко применяемые системы - это C++, Delphi, Java.

ООП характеризуют три основные свойства.

  1. Инкапсуляция. Это объединение структур данных с действиями по их обработке (методами обработки) в новую структуру – класс.

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

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

Основные причины широкого распространения технологии ООП в настоящее время заключаются в следующем:

  • Технология ООП может просто и быстро привести к росту продуктивности и улучшению надежности программного обеспечения;

  • Технология ООП позволяет легко переходить от традиционных языков программирования к интегрированным средам разработки;

  • Технология ООП имеет много сходства с идеями, имеющимися в различных предметных областях.

Следует все же иметь в виду, что несмотря на то, что технология ООП действительно помогает при создании сложных программных систем, она все же не является панацеей от всех трудностей. Она является просто новым пониманием того, что собственно является вычислениями, а также того, как можно структурировать информацию в оперативной памяти компьютера.
Из истории.
Первоначально программирование являлось скорее искусством, чем наукой. Оно было основано на изучении и применении различных языков программирования, таких как COBOL, FORTRAN, Assembler ALGOL и.т.п.

Все эти языки в основном обеспечивали формализацию алгоритмов различного типа, в основном вычислительных. (Кнут, «Искусство программирования»). Были формализованы различные типовые алгоритмы; численные ( решение уравнений, интегрирование), сортировки и.т. п. Основное внимание уделялось точности и скорости вычислений и экономии оперативной памяти. Было введено понятие модульности и разработан аппарат процедур и функций. Хорошая программа, как правило, должна была состоять из головного модуля и набора процедур и функций, к которым происходили обращения. Основными структурами данных были массив и файл. В силу этого перечисленные языки программирования не имели гибких возможностей для работы со сложными структурами данных. Структуры данных подгонялись под алгоритм решения задачи.

Никлаус Вирт сформулировал тезис, который лег в основу следующего шага в развитии программирования – структурного программирования.

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

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

Простая линейная программа, основанная на структуре одномерного массива (вектора), потребует большого количества времени для выполнения этой работы. Однако, если работать с двумерным массивом (матрицей) размерностью NM и отсортировать эту матрицу по строкам, то время счета значительно сократится. В этом случае, если какой – либо отрезок окажется повторяющимся, то в отсортированной матрице две соседние строки окажутся идентичными.


ФСЕСППФЕСЕЕПСФЕЕЕСППСФЕЕППФСССЕПФСЕЕ………

М = 6.

ФСЕСПП позиции 1 – М.

СЕСППФ позиции 2 – М+1.

ЕСППФЕ позиции 3 – М+2.

---------------------- и.т.п.
Во втором случае появилась более сложная структура данных, которую можно трактовать как массив размерностью (N/M, М), или массив векторов размерностью М. Для каждого вектора определена операция сортировки и операция сравнения векторов.

Для реализации нового подхода к разработке программного обеспечения были созданы языки программирования следующего поколения, такие, как «С», Pascal, Modula – 2, ADA и др. Все они характеризуются развитыми средствами конструирования структур данных любой сложности, базирующихся на элементарных типах данных, встроенных в язык. Однако, по-прежнему, данные и средства их обработки - процедуры и функции существовали по отдельности.

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

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

Следующий шаг состоял в появлении и разработке концепции модуля. Модули можно рассматривать как улучшенный метод создания и управления совокупностями имен и связанными с ними значениями. Если рассматривать модуль как абстрактную концепцию, то ее суть состоит в разбиении пространства имен на две части. Открытая (public) часть является доступной извне модуля, закрытая (private) часть доступна только внутри модуля.

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

  • Пользователя следует снабдить всей информацией, необходимой для корректного использования модуля, но не более того;

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

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

Для решения этой проблемы потребовалось разработать новую концепцию – концепцию абстрактных типов данных.

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

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

  1. Экспортировать определение типа данных;

  2. Делать доступным набор операций, использующихся для манипулирования экземплярами типа данных;

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

  4. Создавать необходимое количество экземпляров (объявлять переменные) абстрактного типа данных.

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

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

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


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

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

Во – вторых, интерпретация сообщения зависит от получателя и является различной для разных получателей.

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

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

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

В современных языках программирования (C++, Java, Delphi) категория называется классом, а экземпляры классов (представители) называются объектами.

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





Внутри категории (класса) «Звезды» есть, например, две основные ветви: видимые звезды и невидимые звезды. Невидимые звезды имеют подкатегории (подклассы) «Черные дыры» и «Нейтронные звезды». Видимые звезды имеют подкатегории (подклассы) с переменной и постоянной яркостью, и т. п.

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

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

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

  1   2   3   4   5   6   7   8

Похожие:

Лекция №1. Введение iconАнализ к ф. м н., доцент Рудой Евгений Михайлович 2013-2014 уч год
Лекция (2 часа) Введение. Нормированные пространства. Компактные множества. Теорема Хана-Банаха
Лекция №1. Введение iconЛекция введение
Материалы данного файла могут быть использованы без ограничений для написания собственных работ с целью последующей сдачи в учебных...
Лекция №1. Введение iconЛекция «Сущность и проблемы вэд, состояние вэд в России» 1 час. 2...
Лекция «Внешнеэкономические операции и сделки: виды, классификация, организация» 1 час
Лекция №1. Введение iconЛекция 1 введение
Петрофизика сформировалась к началу 60-х годов, когда появились обобщаю­щие труды по всем вопросам изучения физических свойств пород...
Лекция №1. Введение icon1. Лекция: Введение. История, предмет, структура информатики
Хотя информатика и считается достаточно молодой наукой по отношению ко многим другим отраслям знания, но предпосылки к ее зарождению...
Лекция №1. Введение iconЛекция №1. Введение в Экономикс. Основная проблема экономики и производственные...
Под материальными потребностями подразумевается желания потребителей приобрести и использовать товары и услуги, которые доставят...
Лекция №1. Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Лекция №1. Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Лекция №1. Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок
Лекция №1. Введение iconЛекция №1
Лекция № Общие принципы эффективной организации учебного процесса. Физиологиче­ская цена учебных нагрузок

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
litcey.ru
Главная страница