close

Вход

Забыли?

вход по аккаунту

?

Реорганизация факультета

код для вставкиСкачать
Объектно-ориентированный анализ
и программирование
Лекция 1.
Введение в объектно-орентированное программирование
и язык Java
к.т.н. Гринкруг Е.М. (email: egrinkrug@hse.ru)
23-Sep-14
Software Engineering
1
Введение в объектно-ориентированное
программирование
•
Все языки программирования обеспечивают некоторые абстракции
(предоставляя «машину, сделанную с помощью машины»):
– Язык ассемблера обеспечивает абстрацию физической машины;
– «Императивные» языки (Fortran, С и др.) обеспечивают абстракции
языков ассеблеров (и те, и другие требуют мышления в терминах
компьютера, а не решаемой задачи: программист обеспечивает
преобразование понятий предметной области в понятия машинноориентированного языка);
– «Проблемно-ориентированные» языки сосредоточены на решении задач
определенного класса, для которых они дают полезные абстракции, но они
не всегда пригодны для задач других классов;
– Объектно-ориентированные языки дают инструменты для
представления элементов предметной области как объектов,
реализуемых с помощью других объектов (объектов реализации).
Проблема решается в терминах предметной области, а не в терминах
компьютера, используемого при реализации. Такой подход имеет
сравнительно адекватную аналогию в реальном мире.
23-Sep-14
Software Engineering
2
Характеристики объектно-ориентированного языка
(сформулированы для ОО-языка Smalltalk – предшественника Java)
•
Все является объектом, способным выполнять присущие ему
операции;
•
Программа – это совокупность объектов, указывающих друг другу, что
делать, посредством сообщений (вызовов методов);
•
Каждый объект имеет собственную память, возможно состоящую из
других объектов;
•
Каждый объект имеет тип, определяющий множество сообщений,
которые можно посылать объекту данного типа;
•
Все объекты данного типа могут получать одинаковые сообщения.
23-Sep-14
Software Engineering
3
Определение характеристик объекта (Буч):
•
•
Объект обладает состоянием, поведением, индивидуальностью.
Это - более общее определение (нет сопоставления объекта с типом).
В программировании (computer science) используется термин objectbased (language) для указания на:
– Ограниченную реализацию объектно-ориентированного
программирования, где имеются одно или более из ограничений:
• Нет наследования
• Нет полиморфизма
• Не все значения являются объектами.
Пример – Visual Basic.
– Prototype-based организацию (объекты не являются экземплярами
типа / класса).
Пример – JavaScript.
23-Sep-14
Software Engineering
4
Понятия тип и класс
•
Логическое мышление связано с классификацией (первая описанная
попытка классификации принадлежит Аристотелю, основоположнику
формальной логики, – «класс рыб, класс птиц, ...»);
•
Классификация лежит в основе познания мира (младенцы уже способны к
классификации при начальном усвоении языка);
•
Концепция того, что все объекты, будучи уникальными,
классифицируются по наличию общих характеристик и сходному
поведению, была впервые реализована в первом объектноориентированном языке Simula-67 (предназначенном для Simulation моделирования реального мира, откуда название, - в 1967 г.) Программные
объекты, идентичные во всем, кроме внутреннего состояния во время
выполнения программы, группируются в «класс объектов». Class – как
программный термин – впервые использован в Simula-67.
•
В дальнейшем понятия «тип» и «класс» используются для классификации
интерфейса и реализации – соответственно (в основном...).
23-Sep-14
Software Engineering
5
Создание абстратных типов данных – фундаментальное понятие
объектно-ориентированного программирования
•
Можно единообразно создавать экземпляры встроенных и определяемых типов объектов
и манипулировать ими;
•
Тип объектов определяет, как объекты реагируют на сообщения, т.е. допустимые
манипуляции с ними;
•
В то же время каждый объект обладает индивидуальностью и может быть представлен
самостоятельной сущностью в программе, что отвечает происходящему в реальной
действительности;
•
Классификация объектов позволяет определять наборы объектов с идентичными
характеристиками (элементы данных) и поведением (функциональностью);
•
Класс объектов выступает как тип данных (имеющий свои характеристики и особенности
поведения);
•
Программист расширяет язык программирования как номенклатуру типов данных,
определяя понятия, необходимые для естественного описания решения задачи.
23-Sep-14
Software Engineering
6
Интерфейс и реализация
•
Model-driven development / software engineering – методология програмной
инженерии, которая фокусируется на создании моделей, или абстракций,
более приближенных к концепциям конкретной предметной области, чем к
конкретным вычислительным (алгоритмическим) концепциям;
•
Объектно-ориентированное программирование обеспечивает поддержку
этой методологии средствами системы программирования (языка
программирования);
•
Операции, запросы на выполнение которых могут направляться объекту,
составляют интерфейс объекта;
•
Интерфейс предполагает наличие кода, реализующего операции
интерфейса, и этот код определяется и реализуется типом объекта
(классом) в совокупности со скрытыми используемыми при этом данными.
23-Sep-14
Software Engineering
7
Объект – конкретный поставщик услуг
•
Такой подход к проектированию:
– способствует структуризации программы;
– повышает связываемость программных элементов;
– Помогает «компонентизации» программы;
– Упрощает понимание и сопровождение кода.
Объект имеет скрытую реализацию
•
Такой подход к проектированию:
– разделяет программистов на создателей классов и клиентов;
– позволяет изменять реализацию без нарушения работы клиентов;
– защищает реализацию от нарушений со стороны клиента;
– Упрощает понимание и сопровождение кода.
23-Sep-14
Software Engineering
8
Повторное использование реализации
•
Разработаный и протестированный класс может быть «полезным
куском кода»: хорошо спроектированный код может быть полезен для
других программ;
•
Переиспользование кода – одно из важнейших преимуществ объектноориентированного программирования.
•
Способы повторного использования кода:
– Повторная инстанциация класса (создание новых объектов);
– Внедрение объекта в реализацию другого (member object); то есть
композиция (composition) или аггрегирование (aggregation), что
описывается отношением “has-a” (“a car has an engine”);
– Наследование (менее «гибкий» способ, так как опирается на компилятор).
23-Sep-14
Software Engineering
9
Наследование
•
•
•
•
•
Объединение данных и функциональности в класс позволяет
описывать и моделировать«концепции» предметной области;
Удобно описывать сходные концепции указывая только отличия от
исходной;
Исходная концепция представляется базовым классом (суперклассом,
родительским классом);
Изменения указываются в унаследованном классе (производном,
дочернем [под]классе);
Базовый тип содержит все характеристики и действия, общие для всех
типов, унаследованных от него.
Замечание: в prototype-based
языках, где отсутствует
понятие класса, наследование
сводится к описанию отличий
производного объекта от
родительского объекта
(JavaScript)
23-Sep-14
Software Engineering
10
Наследование
• Наследуемый тип повторяет
интерфейс базового типа;
• Производный класс является
частным случаем базового класса;
• Иерархия типов воплощает как
сходные, так и различные свойства
понятий;
• Без указаний отличия в
реализации главный смысл
наследования теряется...
• Два способы внесения отличий:
Предложите для этих фигур
индивидуальные методы
расширения поведения...
23-Sep-14
– Расширение набора методов;
– Переопределение методов
(изменение поведения).
Software Engineering
11
Отношения «является» и «является-также»
(“IS-A” И “IS-LIKE-A”)
•
•
•
Принцип замены (“is-a”, “является”): если можно обойтись только
переопределением методов, то базовый и производный класс имеют
одинаковый интерфейс, и их объекты – взаимозаменяемы (как, например, USBфлешки разных производителей).
Принцип расширения (“is-like-a”, “является-также”): если новый класс
расширяет совокупность методов в своем интерфейсе, то объекты нового и
старого класса взаимозаменяемы «в одну сторону» (например, цифровой
фотоаппарат при подключении через USB-порт «является также» флешкой,
но он к тому же может фотографировать)
Возможность простого расширения программы путем добавления новых
типов, к объектам которых тем не менее применимы общие базовые
операции (полиморфизм), улучшает архитектуру программы и снижает
стоимость поддержки ПО.
23-Sep-14
Software Engineering
12
Раннее и позднее связывание
• При попытке обращения к объекту производного типа как к
объекту базового типа программист не хочет - и компилятор не
может - знать заранее, какой конкретно код будет выполнен
(это безразлично для вызывающей программы);
• Раннее связывние (early binding) – связь вызывающего
злемента (метода) программы с вызывамым устанавливается до
выполнения программы (компилятором и редактором связей);
• Позднее связывание (late binding) – связь с вызываемым
элементом устанавливается динамически, во время выполнения
(и может не быть известна ранее);
• Позднее связывание – основополагающая концепция
реализации ООП, делающая программу расширяемой.
23-Sep-14
Software Engineering
13
Восходящее и нисходящее преобразование типов
• Преобразование типов – оперирование с объектом как
объектом иного типа;
• Восходящее преобразование типов (upcasting) –
оперирование объектом производного типа как объектом
базового типа (движение вверх по диаграмме наследования);
• Нисходящее преобразование типов (downcasting) –
оперирование с объектом как представителем более
конкретного типа.
23-Sep-14
Software Engineering
14
Одиночное наследование
• Практически все объектно-ориентированные языки (кроме С++)
обеспечивают одиночное наследование (singly rooted inheritance
hierarchy) классов;
• Все типы имеют общий корень иерархии типов – класс Object;
• Все объекты гарантированно обладают общей базовой
функциональностью, с ними можно производить определенные
основные операции, что упрощает их реализацию и использование,
а именно:
– динамическое создание;
– сборку мусора;
– обработку исключительных ситуаций.
23-Sep-14
Software Engineering
15
Создание и уничтожение объектов
•
•
Создание объекта сопровождается выделением ему памяти; когда
объект становится ненужным, память надо освободить.
Память объектов распределяется динамически:
– объекты создаются специальными операциями своих типов
(конструкторами),
– память выделяется из общей «кучи» (heap) ,
– количество и типы создаваемых объектов не известны до запуска
программы.
•
Память объектов освобождается с помощью специального механизма
сборки мусора (garbage collection), который:
– определяет, когда память объекта может быть освобождена;
– освобождат программиста от многих хлопот по ее освобождению;
– снижает вероятность утечки памяти (memory leak), но не гарантирует от
нее.
23-Sep-14
Software Engineering
16
Системное программирование
(этот термин не есть антоним бессистемного программирования)
• Исторически системное программное обеспечение компьютеров
было принято делить на:
– Операционные системы,
• Ответственны за динамические аспекты работы
– Сиситемы программирования
• Организация программ до этапа выполнения.
• С появлением объектно-ориентированного ПО эти различия
стираются:
– Операционные системы становятся объектно-ориентированными
средствами поддержки языков программирования;
– Объектно-ориентированные языки программирования содержат
встроенные в них динамические средства операционных систем.
23-Sep-14
Software Engineering
17
Цель данного курса
•
Показать, как идеи объектно-оринтированного программирования
воплощены в языке Java;
•
Освоить практическое программирование на Java – наиболее широко
применяемом в настоящее время языке программирования;
•
Заложить основы для дальнейшего изучения разнообразных
технологий, базирующихся на Java
Изучение программирования предполагает программирование, как обучение игре на
фортепиано немыслимо без музицирования.
Нельзя научиться плавать даже прослушав лекци чемпионов по плаванию: надо
залезать в воду...
23-Sep-14
Software Engineering
18
Введение в Java
•
История появления языка Java
–
–
–
–
–
–
В 1991 г. Патрик Нортон и Джеймс Гослинг из Sun приступили к разработке языка для
программирования контроллеров переключения каналов кабельного TV (для embedded
software - для различных микроконтроллеров с небольшой памятью), язык получил
название Green (Дж.Гослинг называл его Oak – дуб, но потом выяснилось, что язык с
таким названием уже есть, и его переименовали в Java – название Яванского кофе) ;
Для независимости от конкретного микроконтроллера в основу была положена
концепция виртуальной машины;
сперва этот проект не имел применения (вплоть до 1994 г.); забавно, что
руководителем одной из компаний, отказавшихся подписать контракт на
использование проекта Green, был Джим Кларк (позже основатель компании Netscape
– полностью опиравшейся на Java);
В 1994 с развитием www потребовался web-browser (html – в изображение на
экране);большинство пользователей применяли browser Mosaic разработки
Университета шт.Иллинойс (1993 – это была дипломная работа Марка
Андреессена, позднее - еще одного основателя Netscape);
В 1995 году был разработан browser HotJava, привлекший к Java всеобщий интерес.
Первая версия языка java от фирмы Sun появилась в 1996 году (Java 1.0)
(уже в 1996 г мне довелось написать программы на java в компании Paragraph)
23-Sep-14
Software Engineering
19
Сравнительная популярность
языков программирования
первая двадцатка
(данные 2006 г.)
23-Sep-14
Software Engineering
20
Динамика
популярности
23-Sep-14
Software Engineering
21
•
Развитие Java – платформы (основные «вехи»)
– Версия Java 1.1 (1996-1997) – усовершенствование языка, библиотек,
появление MS Java VM, встроенной в MS IE;
– Версия Java 1.2 (1998) – “Java 2 Standard Edition Software Development Kit
Version 1.2” (J2SE SDK), появление Micro Edition, Enterprise Edition, лозунг
«write once – run everywhere»;
– Версии Java 1.3 и 1.4 – совешенствование библиотек, применение в
серьезных серверных приложениях;
– Версии 5 и 6 (в настоящее время) – совершенствование языка,
виртуальной машины, библиотек (именилась нумерация версий –
отбросили «1.» спереди);
– На подходе Java 7
23-Sep-14
Software Engineering
22
23-Sep-14
Software Engineering
23
23-Sep-14
Software Engineering
24
Инструменты программирования на Java
• Java – программы выполняются виртуальной машиной (jvm).
Существуют многочисленные реализации jvm (от больших
систем до тех, что у вас в телефонах), есть реализации
практически для всех основных операционных систем, мы
будем использовать Java Development Kit (JDK) для Windows
(более ранние версии назывались Java Software Development Kit
(Java SDK));
• Нас будет интересовать Java 2SE (Java 2 Standard Edition);
скачивается с http://java.sun.com/j2se (вы найдете все, что нужно
на нашем сервере);
• После установки необходимого инструментария вы можете быть
(почти) уверены, что ваши Java-программы будут работать под
любыми операционными системами.
23-Sep-14
Software Engineering
25
• Вполне возможно, что java-машина и java runtime environment
(jre) в вашей системе уже есть: многие программы,
использующие java, «приносят» их с собой (на моей машине
одновременно находятся несколько разных версий java);
• При инстолляции в Windows бывает полезно избегать установку
в директории, имеющие пробел в имени (вместо установки в
Program Files лучше устанавливать прямо в «корень» - кто
скажет – почему?);
• После установки надо в консольном окне проверить, с какой
java мы имеем дело:
23-Sep-14
Software Engineering
26
• Если увидите другое, надо разбираться:
– Что-то не так установилось (повторить установку);
– Уже были установки других java машин, что можно проверить/исправить
с помощью манипуляций с переменными окружения (PATH,
JAVA_HOME); эти переменные полезно посмотреть (кто скажет – как?).
• Sun предоставляет все необходимые исходные файлы (и даже
все файлы реализаций jvm, компилятора, и т.д. – за исключением
некоторых коммерческих версий под конкретные процессоры):
• Чтение исходных файлов – лучший способ овладения javaпрограммированием и повседневная практика java-программиста
23-Sep-14
Software Engineering
27
Что установлено?
•
•
•
•
•
•
•
23-Sep-14
README.html – «корень» для
получения ВСЕХ знаний по Java;
Src.zip – все нужные исходные
файлы;
bin – все .exe файлы инструментов
JDK;
lib – необходимые библиотеки;
demo, sample – демонстрационные
программы и примеры;
JRE – runtime environment (без
инструментария);
Include – header-файлы для
добавления платформозависимых
библиотек;
Software Engineering
28
Java SE 6
23-Sep-14
Software Engineering
29
Работа с командной строкой
• Комиляция исходных файлов
• Выполнение Java application
23-Sep-14
Software Engineering
30
Integrated Development Environments
• За прошедшие годы сменились или продолжают использоваться
могочисленные среды разработки (ниже только некоторые,
наиболее известные в свое время и/или сейчас):
– Borland JBuilder,
– MS Java++,
– CosmoCode (CosmoSoftware, SiliconGraphics),
– Oracle JDeveloper,
– IBM VisualAge For Java,
– Eclipse,
– Sun NetBeans,
– JetBrains IntellyJ IDEA.
Наш выбор – IDEA: http://www.jetbrains.com (есть на нашем
сервере)
23-Sep-14
Software Engineering
31
Установка IntellyJ IDEA
• Специально для нашего курса компания JetBrains предоставила
лицензию (есть на нашем севере) for free – скажем ей “thanks a lot”!
23-Sep-14
Software Engineering
32
Демонстрация (applications, applets)
• Java application
• Java applet
23-Sep-14
Software Engineering
33
Обзор учебных материалов на сервере
• Имеющиеся материалы и ресурсы предназначены только для
ваших учебных целей. Они не подлежат распространению и
использованию в иных целях, кроме учебных!
• На нашем сервере имеются:
– Книги
• Наиболее строгое изложение собственно языка – в The Java Language
Specification (3d edition);
– Необходимые инструменты
– Примеры и упражнения
23-Sep-14
Software Engineering
34
Q&A
23-Sep-14
Software Engineering
35
Документ
Категория
Презентации по информатике
Просмотров
58
Размер файла
947 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа