Java.SE.02. Object-oriented programming in Java презентация

Содержание


Презентации» Информатика» Java.SE.02. Object-oriented programming in Java
Object-oriented programming in JavaПричины возникновение ООП
 Классы и объекты
 Три кита ООП
 Наследование
 Интерфейсы
Причины возникновения оопПричины возникновения ООП
 Классификация языков (одна из ...)
 По одной изПричины возникновения ООП
 Декларативная и директивная парадигмы
 Поговорим о различии междуПричины возникновения ООППричины возникновения ООППричины возникновения ООП
 Объектно-ориентированное программирование - это методология программирования, основанная наКлассы и объектыКлассы и объекты
 Классом называется описание совокупности объектов с общими атрибутами,Классы и объекты
 Объект. Понятие "объект" не имеет в ООП каноническогоКлассы и объекты
 Класс / Экземпляр Класса
 Объект совокупность (разнотипных) данныхКлассы и объекты
 Каждый класс может иметь подклассы - классы, обладающиеКлассы и объекты
 Рассмотрим основные этапы разработки класса.
 Прежде всего, необходимоКлассы и объекты
 Варианты графического изображения класса на диаграмме классов
 ПримерыКлассы и объекты
 Переменные класса и константы
 Данные – члены класса,Классы и объекты
 Область видимости
 public
 private
 friendly (по умолчанию)
 protectedКлассы и объекты. Example 1Классы и объекты
 Конструкторы
 Конструктор – это метод, который автоматически вызываетсяКлассы и объекты. Example 2
 Пример использования super и thisКлассы и объекты. Example 3
 Конструкторы. Пример перегрузкиКлассы и объекты
 Объекты создаются динамически с помощью операции new, аКлассы и объекты
 В Java пересмотрена концепция динамического распределения памяти: отсутствуютКлассы и объекты. Example 4Классы и объекты. Example 4
 Результат выполнения:Классы и объекты
 Методы классов, передача параметров в методы
 Ссылки вКлассы и объекты. Example 5
 Результат:Классы и объекты
 Следовательно, при передаче в метод аргумента-ссылки можно изменитьКлассы и объекты. Example 6
 Результат:Классы и объекты
 Таким образом, при попытке в методе изменить черезКлассы и объекты. Example 7
 Результат:Классы и объекты
 Если необходимо вернуть в вызывающий метод ссылку наКлассы и объекты. Example 8
 Результат:Классы и объекты. Example 9
 Явные и неявные параметры метода. ЯвныеКлассы и объекты
 Статические методы и поля
 Поля данных, объявленные вКлассы и объекты
 Для работы со статическими атрибутами используются статические методы,Классы и объекты. Example 10Классы и объекты
 Статические поля используются довольно редко, а вод поляКлассы и объекты
 Статические методы не работают с объектами, поэтому ихКлассы и объекты
 Модификатор final. Модификатор final используется для определения константКлассы и объекты. Example 11Классы и объекты. Example 11Классы и объекты
 Модификатор native
 Приложение на языке Java может вызыватьКлассы и объекты
 Модификатор synchronized .
 При использовании нескольких потоков управленияКлассы и объекты
 Блоки инициализации
 При описании класса могут быть использованыКлассы и объекты
 При создании объекта блоки инициализации класса вызываются последовательно,Классы и объекты. Example 12Классы и объекты. Example 12
 Результат:Классы и объекты
 Инициализация полей класса. Общий порядок инициализации следующий
 ПриКлассы и объекты
 Если значение поля не задано в конструкторе явно,Классы и объекты
 Перегрузка методов. Метод называется перегруженным, если существует несколькоКлассы и объекты
 Перегрузка методов. 
 Если в последнем случае спискиКлассы и объекты. Example 13Классы и объекты. Example 13
 Результат:Классы и объекты
 При непосредственной передаче объекта в метод выбор производитсяКлассы и объекты
 При перегрузке всегда следует придерживаться следующих правил:
 неКлассы и объекты
 Класс java.lang.Object - родительский для всех классов
 СодержитКлассы и объекты
 Переопределение метода equals() - метод equals() при сравненииКлассы и объекты
 Переопределение метода hashCode() - метод int hashCode() возвращаетКлассы и объекты
 Метод hashCode() переопределен, как правило, в каждом классеКлассы и объекты
 Переопределение метода toString() - метод toString() следует переопределятьКлассы и объекты. Example 14Классы и объекты. Example 14Классы и объекты
 Методы с переменным числом параметров
 !!! Возможность передачиКлассы и объекты. Example 15
 Результат:Классы и объекты. Example 16Классы и объекты. Example 16
 Результат:Три кита оопТри кита ООП
 Объектно-ориентированное программирование основано на трех принципах:
 Инкапсуляции;
 Наследовании;
Три кита ООП
 Инкапсуляция (encapsulation) - это механизм, который объединяет данныеТри кита ООПТри кита ООП
 Наследование (inheritance) - это процесс, посредством которого одинТри кита ООПТри кита ООП
 Полиморфизм (polymorphism) - это свойство, которое позволяет одноТри кита ООПТри кита ООП
 Позднее связывание. При вызове того или иного методаНаследованиеНаследование
 Понятие наследования. Один класс может наследовать или расширять поля иНаследованиеНаследование
 Переопределение методов. Переопределенным методом называют метод, описанный в производном классе,Наследование. Example 17
 public class Book {
   private StringНаследование. Example 17
 public class ProgrammerBook extends Book{
   publicНаследование. Example 18
 public class CourseHelper {
 	public Course getCourse(){
 		Наследование. Example 18
 В данной ситуации при компиляции в подклассе BaseCourseHelperНаследование
 Вызов конструкторов при наследовании. При создании объектов производного класса, конструкторНаследование. Example 19
 Следует помнить, что при вызове show() обращение производитсяНаследование. Example 20
 Ссылки на суперкласс и их свойства. Объектная переменнаяНаследование
 Когда вызывается метод, принадлежащий объекту, происходит следующее.
 Компилятор проверяет объявленныйНаследование
 Затем компилятор определяет типы параметров, указанных при вызове метода. ЕслиНаследование
 Если метод является закрытым (private), статическим (static), терминальным (final) илиНаследование
 Если при выполнении программы для вызова метода используется динамическое связывание,Наследование. Example 21
 Предотвращение переопределения методов. Чтобы предотвратить переопределение некоторых ихНаследование
 Классы, объявленные как терминальными, нельзя расширить. Объявить терминальный класс можноНаследование
 Приведение типов при наследовании. Как известно, в языке Java каждаяНаследование. Example 22
 public class BookInspector {
   public staticНаследование
 При недопустимом преобразовании типов при выполнении программы система обнаружит несоответствиеНаследование. Example 23
 public class BookInspector {
   public staticНаследование
 Компилятор не позволить выполнить некорректное приведение типов. Например, приведение типовНаследование
 Абстрактные методы и классы. Часто при проектировании иерархии классов верхниеНаследование. Example 24
 Абстрактные классы объявляются с ключевым словом abstract иНаследование. Example 24
 public abstract class GraphicObject {
 	public abstract voidНаследование. Example 25
 public abstract class Book {
   privateНаследование. Example 25
 public class ProgrammerBook extends Book{
   publicНаследование
 При расширении абстрактного класса все его абстрактные методы необходимо определитьНаследование. Example 26
 Статические методы при наследовании. Для статических методов вНаследование. Example 27
 Наследование от стандартных классов. Кроме собственных Java позволяетИнтерфейсыИнтерфейсы
 Интерфейсы в Java применяются для добавления к классам новых возможностей,Интерфейсы
 Определение интерфейса. Синтаксис определения интерфейса следующий.Интерфейсы. Example 28
 Реализация интерфейса происходит в классе с помощью ключевогоИнтерфейсы. Example 28
 public class Circle implements Square{
   privateИнтерфейсы
 Свойства интерфейсов.
 C помощью оператора new нельзя создать экземпляр интерфейса.
Интерфейсы. Example 29
 public class Test {
   public staticИнтерфейсы. Example 30
 Вложенные интерфейсы. Интерфейсы можно вложить (объявить членом) другогоИнтерфейсы. Example 31
 Интерфейсы и обратные вызовы. Обратным вызовом (callback) называетсяИнтерфейсы. Example 31Интерфейсы
 Существуют ИСТОЧНИК события, СЛУШАТЕЛЬ события и непосредственно само СОБЫТИЕ. СИнтерфейсы
 Клонирование объектов. Интерфейс Cloneable. Рассмотрим ситуацию, когда в метод передаетсяИнтерфейсы. Example 32Интерфейсы
 Результат программы следующий:
 Year: 2008 mounth: 7 day: 3
 Year:Интерфейсы. Example 33
 Результат выполнения программы:
 Year: 2008 mounth: 7 day:Интерфейсы
 Метод clone() существует практически во всех библиотечных классах. Однако, вИнтерфейсы
 Для того, чтобы переопределить метод clone() необходимо реализовать интерфейс CloneableИнтерфейсы
 Класс Object содержит protected-метод clone(), осуществляющий побитовое копирование объекта производногоИнтерфейсы. Example 34Интерфейсы. Example 35Интерфейсы. Example 35Интерфейсы. Example 36
 Сравнение объектов. Интерфейс Comparable. Метод sort(…) класса ArraysИнтерфейсы
 Также этот метод упорядочивает и массив объектов при одном условии:Интерфейсы. Example 37
 import java.util.Date;
 public class Book implements Comparable, Cloneable{
Интерфейсы. Example 37
  public int compareTo(Object object) {
  Введение в Design PatternsВведение в Design Patterns 
 Шаблон
 это идея, метод решения, общийВведение в Design PatternsВведение в Design PatternsВведение в Design Patterns. Example 38Введение в Design Patterns. Example 38Введение в Design Patterns. Example 39Введение в Design PatternsВведение в Design Patterns. Example 40Введение в Design PatternsВведение в Design Patterns. Example 41Введение в Design Patterns. Example 41Введение в Design PatternsВведение в Design Patterns. Example 42Введение в Design Patterns. Example 42Введение в Design Patterns. Example 42Введение в Design PatternsВведение в Design Patterns 
 	Преимущества использования шаблонов:
 Нет необходимости решатьIhar Blinou, PhD
 Java.SE.02
 Object-oriented programming in Java



Слайды и текст этой презентации
Слайд 1
Описание слайда:
Object-oriented programming in Java


Слайд 2
Описание слайда:
Причины возникновение ООП Классы и объекты Три кита ООП Наследование Интерфейсы Введение в Design Patterns

Слайд 3
Описание слайда:
Причины возникновения ооп

Слайд 4
Описание слайда:
Причины возникновения ООП Классификация языков (одна из ...) По одной из классификаций языки программирования делятся на: директивные (directive), называемые также процедурными (procedural) или императивными (imperative), декларативные (declarative) языки, объектно-ориентированные (object-oriented).

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

Слайд 6
Описание слайда:
Причины возникновения ООП

Слайд 7
Описание слайда:
Причины возникновения ООП

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

Слайд 9
Описание слайда:
Классы и объекты

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

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

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

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

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

Слайд 15
Описание слайда:
Классы и объекты Варианты графического изображения класса на диаграмме классов Примеры графического изображения конкретных классов

Слайд 16
Описание слайда:
Классы и объекты Переменные класса и константы Данные – члены класса, которые называются полями или переменными класса, объявляются в классе следующим образом: cпецификатор тип имя; Cпецификаторы доступа: static public final private protected

Слайд 17
Описание слайда:
Классы и объекты Область видимости public private friendly (по умолчанию) protected

Слайд 18
Описание слайда:
Классы и объекты. Example 1

Слайд 19
Описание слайда:
Классы и объекты Конструкторы Конструктор – это метод, который автоматически вызывается при создании объекта класса и выполняет действия только по инициализации объекта; Конструктор имеет то же имя, что и класс; Вызывается не по имени, а только вместе с ключевым словом new при создании экземпляра класса; Конструктор не возвращает значение, но может иметь параметры и быть перегружаемым.

Слайд 20
Описание слайда:
Классы и объекты. Example 2 Пример использования super и this

Слайд 21
Описание слайда:
Классы и объекты. Example 3 Конструкторы. Пример перегрузки

Слайд 22
Описание слайда:
Классы и объекты Объекты создаются динамически с помощью операции new, а уничтожаются автоматически. Когда никаких ссылок на объект не существует (все ссылки на него вышли из области видимости программы) предполагается, что объект больше не нужен, и память, занятая объектом, может быть освобождена. “Сборка мусора” происходит нерегулярно во время выполнения программы. Рекомендовано ее выполнить вызовом метода System.gc() или Runtime.getRuntime().gc(). Вызов метода System.runFinalization() приведет к запуску метода finalize() для объектов утративших все ссылки.

Слайд 23
Описание слайда:
Классы и объекты В Java пересмотрена концепция динамического распределения памяти: отсутствуют способы освобождения динамически выделенной памяти. Вместо этого реализована система автоматического освобождения памяти (сборщик мусора), выделенной с помощью оператора new. Сборщик мусора уничтожает объекты, которым не соответствует ни одна ссылка из активного потока. Аналогом деструктора можно считать метод finalize(), который исполняющая среда языка Java будет вызывать каждый раз, когда сборщик мусора будет уничтожать объекты этого класса.

Слайд 24
Описание слайда:
Классы и объекты. Example 4

Слайд 25
Описание слайда:
Классы и объекты. Example 4 Результат выполнения:

Слайд 26
Описание слайда:
Классы и объекты Методы классов, передача параметров в методы Ссылки в методы передаются по значению. Выделяется память под параметры метода, и те переменные, которые являются ссылочными аргументами инициализируются значением своих фактических параметров. Таким образом, минимум две ссылки начинают указывать на один объект.

Слайд 27
Описание слайда:
Классы и объекты. Example 5 Результат:

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

Слайд 29
Описание слайда:
Классы и объекты. Example 6 Результат:

Слайд 30
Описание слайда:
Классы и объекты Таким образом, при попытке в методе изменить через переданную ссылку константный объект приведет к созданию нового объекта, на который будет ссылаться параметр метода. При завершении метода связь с этим объектом разрушится.

Слайд 31
Описание слайда:
Классы и объекты. Example 7 Результат:

Слайд 32
Описание слайда:
Классы и объекты Если необходимо вернуть в вызывающий метод ссылку на новый константный объект, созданный в этом методе, следует указать её тип как тип возвращаемого методом значения и использовать return.

Слайд 33
Описание слайда:
Классы и объекты. Example 8 Результат:

Слайд 34
Описание слайда:
Классы и объекты. Example 9 Явные и неявные параметры метода. Явные параметры метода определяются списком параметров. Неявный параметр – это this – ссылка на вызвавший метод объект.

Слайд 35
Описание слайда:
Классы и объекты Статические методы и поля Поля данных, объявленные в классе как static, являются общими для всех объектов класса и называются переменными класса. Если один объект изменит значение такого поля, то это изменение увидят все объекты.

Слайд 36
Описание слайда:
Классы и объекты Для работы со статическими атрибутами используются статические методы, объявленные со спецификатором static. являются методами класса; не привязаны ни к какому объекту; не содержат указателя this на конкретный объект, вызвавший метод; реализуют парадигму «раннего связывания», жестко определяющую версию метода на этапе компиляции; статические поля и методы не могут обращаться к нестатическим полям и методам напрямую (по причине недоступности указателя this ), так как для обращения к статическим полям и методам достаточно имени класса, в котором они определены.

Слайд 37
Описание слайда:
Классы и объекты. Example 10

Слайд 38
Описание слайда:
Классы и объекты Статические поля используются довольно редко, а вод поля static final наоборот часто. Очень часто используемая статическая константа System.out. другая часто используемая константа – Math.PI. Статические константы нет смысла делать закрытыми, а обращаются к ним через имя класса: имя_класса.имя_статической_константы

Слайд 39
Описание слайда:
Классы и объекты Статические методы не работают с объектами, поэтому их использовать следует в двух случаях: когда методу не нужен доступ к состоянию объекта, а все необходимые параметры задаются явно (например, метод Math.pow(…). когда методу нужен доступ только к статическим полям класса (статический метод не может получить доступ к нестатическим полям класса, так как они принадлежат объектам, а не классам). Статические методы можно вызывать, даже если ни один объект этого класса не создан. Кроме того, статические методы часто используют в качестве порождающих, т.е. таких методов. которые создают объект своего класса и возвращают ссылку на него.

Слайд 40
Описание слайда:
Классы и объекты Модификатор final. Модификатор final используется для определения констант в качестве члена класса, локальной переменной или параметра метода. Методы, объявленные как final, нельзя замещать в подклассах, для классов – создавать подклассы. Константа может быть объявлена как поле класса, но не проинициализирована. В этом случае она должна быть проинициализирована в логическом блоке класса, заключенном в {}, или конструкторе, но только в одном из указанных мест. Значение по умолчанию константа получить не может в отличие от переменных класса. Константы могут быть объявлены в методах как локальные или как параметры метода. В обоих случаях значения таких констант изменять нельзя. Значение константному полю можно присвоить при объявлении, в логическом блоке инициализации или в конструкторе.

Слайд 41
Описание слайда:
Классы и объекты. Example 11

Слайд 42
Описание слайда:
Классы и объекты. Example 11

Слайд 43
Описание слайда:
Классы и объекты Модификатор native Приложение на языке Java может вызывать методы, написанные на языке С++. Такие методы объявляются с ключевым словом native, которое сообщает компилятору, что метод реализован в другом месте. public native int loadCripto(int num); Методы, помеченные native, можно переопределять обычными методами в подклассах.

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

Слайд 45
Описание слайда:
Классы и объекты Блоки инициализации При описании класса могут быть использованы логические блоки. Логическим блоком называется код, заключенный в фигурные скобки и не принадлежащий ни одному методу текущего класса. { /* код */ } Логические блоки чаще всего используются в качестве инициализаторов полей, но могут содержать вызовы методов как текущего класса, так и не принадлежащих ему. Для инициализации статических переменных существуют статические блоки инициализации. В этом случае фигурные скобки предваряются ключевым словом static.

Слайд 46
Описание слайда:
Классы и объекты При создании объекта блоки инициализации класса вызываются последовательно, в порядке размещения, вместе с инициализацией полей как простая последовательность операторов, и только после выполнения последнего блока будет вызван конструктор класса. Операции с полями класса внутри логического блока до явного объявления этого поля возможны только при использовании ссылки this, представляющую собой ссылку на текущий объект. Логический блок может быть объявлен со спецификатором static. В этом случае он вызывается только один раз в жизненном цикле приложения при создании объекта или при обращении к статическому методу (полю) данного класса.

Слайд 47
Описание слайда:
Классы и объекты. Example 12

Слайд 48
Описание слайда:
Классы и объекты. Example 12 Результат:

Слайд 49
Описание слайда:
Классы и объекты Инициализация полей класса. Общий порядок инициализации следующий При загрузке классов в память статические поля инициализируются значениями по умолчанию. Статически поля классов инициализируются значением, присвоенным при объявлении. Выполняется статический блок инициализации. При вызове конструктора класса все поля данных инициализируются своими значениями, предусмотренными по умолчанию. Инициализаторы всех полей и блоки инициализации выполняются в порядке их перечисления в объявлении класса. Если в первой строке конструктора вызывается другой конструктор, то вы­полняется вызванный конструктор. Выполняется тело конструктора.

Слайд 50
Описание слайда:
Классы и объекты Если значение поля не задано в конструкторе явно, ему автоматически присваивается значение по умолчанию: числам — нули, булевским значениям — false,а ссылкам на объект — null.

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

Слайд 52
Описание слайда:
Классы и объекты Перегрузка методов. Если в последнем случае списки параметров совпадают, то имеет место другой механизм – переопределение метода. Статические методы могут перегружаться нестатическими и наоборот – без ограничений. При вызове перегруженных методов следует избегать ситуаций, когда компилятор будет не в состоянии выбрать тот или иной метод.

Слайд 53
Описание слайда:
Классы и объекты. Example 13

Слайд 54
Описание слайда:
Классы и объекты. Example 13 Результат:

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

Слайд 56
Описание слайда:
Классы и объекты При перегрузке всегда следует придерживаться следующих правил: не использовать сложных вариантов перегрузки; не использовать перегрузку с одинаковым числом параметров; заменять при возможности перегруженные методы на несколько разных методов.

Слайд 57
Описание слайда:
Классы и объекты Класс java.lang.Object - родительский для всех классов Содержит следующие методы: protected Object clone() – создает и возвращает копию вызывающего объекта; boolean equals(Object ob) – предназначен для переопределения в подклассах с выполнением общих соглашений о сравнении содержимого двух объектов; Class<? extends Object> getClass() – возвращает объект типа Class; protected void finalize() – вызывается перед уничтожением объекта автоматическим сборщиком мусора (garbage collection); int hashCode() – возвращает хэш-код объекта; String toString() – возвращает представление объекта в виде строки.

Слайд 58
Описание слайда:
Классы и объекты Переопределение метода equals() - метод equals() при сравнении двух объектов возвращает истину, если содержимое объектов эквивалентно, и ложь – в противном случае. При переопределении должны выполняться соглашения: рефлексивность – объект равен самому себе; симметричность – если x.equals(y) возвращает значение true, то и y.equals(x) всегда возвращает значение true; транзитивность – если метод equals() возвращает значение true при сравнении объектов x и y, а также y и z, то и при сравнении x и z будет возвращено значение true; непротиворечивость – при многократном вызове метода для двух не подвергшихся изменению за это время объектов возвращаемое значение всегда должно быть одинаковым; ненулевая ссылка при сравнении с литералом null всегда возвращает значение false.

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

Слайд 60
Описание слайда:
Классы и объекты Метод hashCode() переопределен, как правило, в каждом классе и возвращает число, являющееся уникальным идентификатором объекта, зависящим в большинстве случаев только от значения объекта. Следует переопределять всегда, когда переопределен метод equals().

Слайд 61
Описание слайда:
Классы и объекты Переопределение метода toString() - метод toString() следует переопределять таким образом, чтобы кроме стандартной информации о пакете (опционально), в котором находится класс, и самого имени класса (опционально), он возвращал значения полей объекта, вызвавшего этот метод (то есть всю полезную информацию объекта), вместо хэш-кода, как это делается в классе Object. В классе Object возвращает строку с описанием объекта в виде: getClass().getName() + '@' + Integer.toHexString(hashCode()) Метод вызывается автоматически, когда объект выводится методами println(), print() и некоторыми другими. При реализации всегда следует стремиться к тому, чтобы сообщить максимальную информацию об объекте.

Слайд 62
Описание слайда:
Классы и объекты. Example 14

Слайд 63
Описание слайда:
Классы и объекты. Example 14

Слайд 64
Описание слайда:
Классы и объекты Методы с переменным числом параметров !!! Возможность передачи в метод нефиксированного числа параметров позволяет отказаться от предварительного создания массива объектов для его последующей передачи в метод. Чтобы передать несколько массивов в метод по ссылке, следует использовать следующее объявление: Методы с переменным числом аргументов могут быть перегружены:

Слайд 65
Описание слайда:
Классы и объекты. Example 15 Результат:

Слайд 66
Описание слайда:
Классы и объекты. Example 16

Слайд 67
Описание слайда:
Классы и объекты. Example 16 Результат:

Слайд 68
Описание слайда:
Три кита ооп

Слайд 69
Описание слайда:
Три кита ООП Объектно-ориентированное программирование основано на трех принципах: Инкапсуляции; Наследовании; Полиморфизме. и одном механизме: Позднее связывание Включение сюда механизма вопрос крайне спорный.

Слайд 70
Описание слайда:
Три кита ООП Инкапсуляция (encapsulation) - это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. В объектно-ориентированном программировании код и данные могут быть объединены вместе; в этом случае говорят, что создаётся так называемый "чёрный ящик". Когда коды и данные объединяются таким способом, создаётся объект (object).

Слайд 71
Описание слайда:
Три кита ООП

Слайд 72
Описание слайда:
Три кита ООП Наследование (inheritance) - это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать основные свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование бывает двух видов: одиночное - когда каждый класс имеет одного и только одного предка; множественное - когда каждый класс может иметь любое количество предков.

Слайд 73
Описание слайда:
Три кита ООП

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

Слайд 75
Описание слайда:
Три кита ООП

Слайд 76
Описание слайда:
Три кита ООП Позднее связывание. При вызове того или иного метода класса сначала ищется метод у самого класса. Если метод найден, то он выполняется и поиск этого метода на этом завершается. Если же метод не найден, то обращаемся к родительскому классу и ищем вызванный метод у него. Если найден - поступаем как при нахождении метода в самом классе. А если нет - продолжаем дальнейший поиск вверх по иерархическому дереву. Вплоть до корня(верхнего класса) иерархии.

Слайд 77
Описание слайда:
Наследование

Слайд 78
Описание слайда:
Наследование Понятие наследования. Один класс может наследовать или расширять поля и методы другого класса с помощью ключевого слова extends. Класс, который выступает базой для расширения, называют суперклассом, класс, который непосредственно проводит расширение, - подклассом. Подкласс имеет доступ ко всем открытым полям и методам суперкласса, так, словно они описаны в подклассе: производный класс не имеет доступа к закрытым полям и методам класса. Также подкласс может добавлять методы и переопределять методы.

Слайд 79
Описание слайда:
Наследование

Слайд 80
Описание слайда:
Наследование Переопределение методов. Переопределенным методом называют метод, описанный в производном классе, сигнатура этого метода совпадает с сигнатурой метода, описанного в суперклассе.

Слайд 81
Описание слайда:
Наследование. Example 17 public class Book { private String title; private int yearPublished; private int price; public Book() {} public Book(String title, int yearPublished, int price) { this.title = title; this.yearPublished = yearPublished; this.price = price; } public String getTitle() { return title; } public int getYearPublished() { return yearPublished; } public int getPrice() { return price; } public void printReport() { System.out.println("Название: "+title+" год издания: "+yearPublished+" цена: "+price); } }

Слайд 82
Описание слайда:
Наследование. Example 17 public class ProgrammerBook extends Book{ public ProgrammerBook(String title, int yearPublished, int price, String level) { super(title,yearPublished,price); this.level = level; } public String getLevel() { return level; } public void printReport() { System.out.println("Название: "+getTitle()+" год издания: "+getYearPublished()+" цена: "+getPrice()+" уровень: "+level); } private String level; } public class BookInspector { public static void main(String[] args) { Book mybook = new Book("Золушка",2000, 19000); ProgrammerBook myprogrbook = new ProgrammerBook("Java",2006,46000,"hight"); mybook. printReport(); myprogrbook. printReport(); } }

Слайд 83
Описание слайда:
Наследование. Example 18 public class CourseHelper { public Course getCourse(){ System.out.println("Course"); return new Course(); } } public class BaseCourseHelper extends CourseHelper { public BaseCourse getCourse(){ System.out.println("BaseCourse"); return new BaseCourse(); } }

Слайд 84
Описание слайда:
Наследование. Example 18 В данной ситуации при компиляции в подклассе BaseCourseHelper создаются два метода. При обращении к методу getCourse() версия метода определяется «ранним связыванием» без использования полиморфизма, но при выполнении вызывается метод-подставка. Обращение к полю производится по типу ссылки, возвращаемой методом getCourse(), то есть к полю класса Course.

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

Слайд 86
Описание слайда:
Наследование. Example 19 Следует помнить, что при вызове show() обращение производится к ближайшему суперклассу.

Слайд 87
Описание слайда:
Наследование. Example 20 Ссылки на суперкласс и их свойства. Объектная переменная базового класса может ссылаться на объекты как базового, так и производного классов. Такая возможность называется полиморфизмов. Автоматический выбор нужного метода во время выполнения программы называется динамическим связыванием (dynamic binding).

Слайд 88
Описание слайда:
Наследование Когда вызывается метод, принадлежащий объекту, происходит следующее. Компилятор проверяет объявленный тип объекта и имя метода. Допустим, происходит вызов метода x.f(args), прочем неявный параметр объявлен как объект класса С. Заметим, что могут существовать несколько методов с именем f, имеющих разные типы параметров (например, метод f(int) и метод f(String)). Компилятор пронумерует все методы с именем f в классе С и все открытые методы с именем f в суперклассах класса С.

Слайд 89
Описание слайда:
Наследование Затем компилятор определяет типы параметров, указанных при вызове метода. Если среди всех методов с именем f есть только одни метод, типы параметров которого совпадают с указанными, происходит его вызов. Этот процесс называется разрешением перегрузки (overloading resolution). Например, при вызове x.f(“Hello”) компилятор выберет метод f(String), а не метод f(int). Ситуация может осложниться вследствие преобразования типов (int в double). Если компилятор не находит ни одного метода с подходящим набором параметров, или в результате преобразования типов возникает несколько методом, соответствующих данному вызову, выдается сообщение об ошибке

Слайд 90
Описание слайда:
Наследование Если метод является закрытым (private), статическим (static), терминальным (final) или конструктором, компилятор точно знает, какой метод вызвать. Такой процесс называется статическим связыванием (static binding). В противном случае метод, подлежащий вызову, определяется по фактическому типу неявного параметра, и во время выполнения программы должно использоваться динамическое связывание. В нашем примере компилятор сгенерировал бы команду метода f(String) с помощью динамического связывания.

Слайд 91
Описание слайда:
Наследование Если при выполнении программы для вызова метода используется динамическое связывание, виртуальная машина должна вызвать версию метода, соответствующую фактическому типу объекта, на который ссылается переменная x. Допустим, что объект имеет фактический тип D, являющийся суперклассом класса С. Если в классе D определен метод f(string), то вызывается именно он. Если нет, то поиск метода f(String), подлежащего вызову, выполняется в суперклассе и т.д.

Слайд 92
Описание слайда:
Наследование. Example 21 Предотвращение переопределения методов. Чтобы предотвратить переопределение некоторых их необходимо объявить терминальными с помощью ключевого слова final. Если в классе Book объявить метод getPrice() терминальным, то в производном классе ProgrammerBook переопределить его будет нельзя.

Слайд 93
Описание слайда:
Наследование Классы, объявленные как терминальными, нельзя расширить. Объявить терминальный класс можно следующим образом.

Слайд 94
Описание слайда:
Наследование Приведение типов при наследовании. Как известно, в языке Java каждая объектная переменная имеет тип, описывающий разновидность объекта, на который ссылается переменная, и все, что он может делать. На основе описания классов компилятор проверяет, сужает или расширяет возможности класса программист, объявляющий переменную. Если переменной суперкласса присваивается объект подкласса, возможности класса сужаются, и компилятор без проблем позволяет программисту сделать это. Если, наоборот, объект суперкласса присваивается переменной подкласса, возможности класса расширяются, поэтому программист должен подтвердить это с помощью обозначения, предназначенного для приведения типов, указав в скобках имя подкласса (subclass).

Слайд 95
Описание слайда:
Наследование. Example 22 public class BookInspector { public static void main(String[] args){ Book[] mybook = new Book[4]; mybook[0] = new Book("Золушка", 2000,19000); mybook[1] = new ProgrammerBook("Java",2006,46000,"hight"); mybook[2] = new Book("Дневной дозор",2002,25000); mybook[3] = new ProgrammerBook("C++",2009,32000,"medium"); Book book; book = mybook[0]; book.printReport(); book = mybook[1]; book.printReport(); ProgrammerBook prbook; // prbook = (ProgrammerBook)mybook[0]; // ОШИБКА prbook = (ProgrammerBook)mybook[1]; // ВСЕ ХОРОШО report(mybook); } static void report(Book[] book) { for(int i=0; i<book.length; i++) book[i].printReport(); } }

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

Слайд 97
Описание слайда:
Наследование. Example 23 public class BookInspector { public static void main(String[] args) { Book[] mybook = new Book[4]; mybook[0] = new Book("Золушка", 2000,19000); mybook[1] = new ProgrammerBook("Java",2006,46000,"hight"); mybook[2] = new Book("Дневной дозор",2002,25000); mybook[3] = new ProgrammerBook("C++",2009,32000,"medium"); report(mybook); } static void report(Book[] book){ ProgrammerBook prbook; Book bk; for(int i=0; i<book.length; i++){ if(book[i] instanceof ProgrammerBook){ prbook = (ProgrammerBook)book[i]; System.out.println("Programmer level = " + prbook.getLevel()); } else { bk = (Book)book[i]; System.out.println("Book price = " + bk.getPrice()); } } } }

Слайд 98
Описание слайда:
Наследование Компилятор не позволить выполнить некорректное приведение типов. Например, приведение типов

Слайд 99
Описание слайда:
Наследование Абстрактные методы и классы. Часто при проектировании иерархии классов верхние классы иерархии становятся все более и более абстрактными, так что реализовывать некоторые методы в них не имеет никакого смысла. Однако удалить их из класса нельзя, так как при дальнейшем использовании базовых объектных ссылок на объекты производных классов необходим доступ к переопределенным методам, а он возможен только при наличии в них метода с такой же сигнатурой как в базовом классе. В таком случае метод следует объявлять абстрактным. В классе, где метод объявляется абстрактным, его реализация не требуется. Если в классе есть абстрактные методы, тои класс можно объявить абстрактным.

Слайд 100
Описание слайда:
Наследование. Example 24 Абстрактные классы объявляются с ключевым словом abstract и могут содержать объявления абстрактных методов, которые не реализованы в этих классах. Объекты таких классов создать нельзя, можно создать объекты подклассов, которые реализуют эти методы. Абстрактные методы помещаются в абстрактных классах или интерфейсах, тела таких методов отсутствуют и реализуются в подклассах.

Слайд 101
Описание слайда:
Наследование. Example 24 public abstract class GraphicObject { public abstract void draw(); //абстрактный метод public void moveTo(int x, int y) { //движение центра фигуры } } class Circle extends GraphicObject { public void draw(){ //рисуем круг } } class Runner { public static void main(String[] args) { GraphicObject mng; // можно объявить ссылку //mng = new GraphicObject(); //нельзя создать объект! mng = new Circle(); mng.draw(); } }

Слайд 102
Описание слайда:
Наследование. Example 25 public abstract class Book { private String title; private int yearPublished; private int price; public Book() {} public Book(String title, int yearPublished, int price){ this.title = title; this.yearPublished = yearPublished; this.price = price; } public abstract void printReport(); public String getTitle(){ return title; } public int getYearPublished(){ return yearPublished; } public int getPrice(){ return price; } }

Слайд 103
Описание слайда:
Наследование. Example 25 public class ProgrammerBook extends Book{ public ProgrammerBook(String title, int year_published, int price, String level){ super(title,year_published,price); this.level = level; } public String getLevel(){ return level; } public void show(){ System.out.println("Название: "+getTitle()+" - год издания: "+getYearPublished()+" - цена: "+getPrice()+" уровень: "+level); } private String level; } public class ChildrenBook extends Book{ public ChildrenBook(String title, int year_published, int price, int yearFrom){ super(title,year_published,price); this.yearFrom = yearFrom; } public void printReport() { System.out.println("Название: "+getTitle()+" - год издания: "+getYearPublished()+ " - цена: "+getPrice()+" возраст: "+yearFrom); } private int yearFrom; }

Слайд 104
Описание слайда:
Наследование При расширении абстрактного класса все его абстрактные методы необходимо определить или подкласс также объявить абстрактным. Нельзя создавать объекты абстрактных классов, однако можно объявлять объектные переменные.

Слайд 105
Описание слайда:
Наследование. Example 26 Статические методы при наследовании. Для статических методов в Java полиморфизм неприменим

Слайд 106
Описание слайда:
Наследование. Example 27 Наследование от стандартных классов. Кроме собственных Java позволяет расширять и стандартные классы.

Слайд 107
Описание слайда:
Интерфейсы

Слайд 108
Описание слайда:
Интерфейсы Интерфейсы в Java применяются для добавления к классам новых возможностей, которых нет и не может быть в базовых классах. Интерфейсы говорят о том, что класс может делать, но не говорят, как он должен это делать. Предположим, что существует интерфейс ПЛАТИТЬ_ЗАРПЛАТУ. Возможность “платить зарплату” должна быть у многих классов. Например, класс ДИРЕКТОР может реализовывать интерфейс ПЛАТИТЬ_ЗАРПЛАТУ, класс КАССИР также может иметь возможность ПЛАТИТЬ_ЗАРПЛАТУ. Однако, в интерфейсе не будет сказано, как классы будут эту возможность (платить долгожданную зарплату) осуществлять. Интерфейс только гарантирует, что класс выполняет какие-то функции, а как он их выполняет – дело неинтерфейсное. Так, диплом подтверждает, что человек может делать какую-то работу, однако то, как он её будет выполнять по диплому непонятно. Следовательно, диплом здесь выступает в роли интерфейса. Во многих источниках ещё можно прочитать, что интерфейсы являются заменой множественному наследованию. Только интерфейсы более удобны, более логичны и менее громоздки.

Слайд 109
Описание слайда:
Интерфейсы Определение интерфейса. Синтаксис определения интерфейса следующий.

Слайд 110
Описание слайда:
Интерфейсы. Example 28 Реализация интерфейса происходит в классе с помощью ключевого слова implements. Если реализуемых интерфейсов несколько, то они перечисляются через запятую. Интерфейс считается реализованным, когда в классе и/или в его суперклассе реализованы все методы интерфейса.

Слайд 111
Описание слайда:
Интерфейсы. Example 28 public class Circle implements Square{ private int r; public Circle(int r) { this.r = r;} public double square() { return r*r*Square.PI;} public void print() {System.out.println("Square circle: « +square());} } public class Test { public static void main(String[] args){ Box box = new Box(4); Rectangle rectangle = new Rectangle(2,3); Circle circle = new Circle(3); box.print(); rectangle.print(); circle.print(); System.out.println("Box: "+box.square()); System.out.println("Rectangle: "+rectangle.square()); System.out.println("Circle: "+circle.square()); } }

Слайд 112
Описание слайда:
Интерфейсы Свойства интерфейсов. C помощью оператора new нельзя создать экземпляр интерфейса. Можно объявлять интерфейсные ссылки. Интерфейсные ссылки должны ссылать на объекты классов, реализующих данный интерфейс. Через интерфейсную ссылку можно вызвать только методы определенные с интерфейсе. С помощью оператора instanseof можно проверять, реализует ли объект определенный интерфейс. Если класс не полностью реализует интерфейс, то он должен быть объявлен как abstract. Интерфейс может быть расширен при помощи наследования от другого интерфейса, синтаксис в этом случае аналогичен синтаксисом наследования классов .

Слайд 113
Описание слайда:
Интерфейсы. Example 29 public class Test { public static void main(String[] args) { Box box = new Box(4); //box = new Square(); // ERROR Square square; square = box; box.print(); System.out.println("Box: "+square.square()); // square.print() // ERROR if (box instanceof Square) { System.out.println("box implements square"); } } }

Слайд 114
Описание слайда:
Интерфейсы. Example 30 Вложенные интерфейсы. Интерфейсы можно вложить (объявить членом) другого класса или интерфейса. В этом случае значение доступа может принимать значения public, private, protected. Когда вложенный интерфейс использует вне области вложения, то он используется вместе с именем класса или интерфейса.

Слайд 115
Описание слайда:
Интерфейсы. Example 31 Интерфейсы и обратные вызовы. Обратным вызовом (callback) называется набор инструкций, который выполняется всякий раз, когда происходит какое-либо событие, например, действие, выполняемое при нажатии кнопки. Рассмотрим пример Кея Хорстманна.

Слайд 116
Описание слайда:
Интерфейсы. Example 31

Слайд 117
Описание слайда:
Интерфейсы Существуют ИСТОЧНИК события, СЛУШАТЕЛЬ события и непосредственно само СОБЫТИЕ. С точки зрения Java все эти существа – объекты каких-то классов. На источник не налагается никаких ограничений, главное, чтобы он мог генерировать хоть какое-нибудь событие. Самими событиями являются объекты классов, расширяющих класс Event или его потомков. А вот слушатель события обязательно должен быть объектом класса, реализующего интерфейс Listener или его потомка. В примере класс реализует интерфейс ActionListener, где содержится всего один метод public void actionPerformed(ActionEvent event). Объект-слушатель события должен зарегистрироваться в объекте источнике-событии. При наступлении самого события источник вызывает метод actionPerformed() зарегистрированного слушателя, передавая ему ссылку на объект-событие.

Слайд 118
Описание слайда:
Интерфейсы Клонирование объектов. Интерфейс Cloneable. Рассмотрим ситуацию, когда в метод передается ссылка на объект и метод сам возвращает ссылку на объект.

Слайд 119
Описание слайда:
Интерфейсы. Example 32

Слайд 120
Описание слайда:
Интерфейсы Результат программы следующий: Year: 2008 mounth: 7 day: 3 Year: 2008 mounth: 7 day: 3 Year: 2008 mounth: 3 day: 3 Year: 2008 mounth: 3 day: 3 Результат не совсем тот. который ожидался. Через внешнюю ссылку date2 изменилось внутреннее состояние объекта mydate. В такой ситуации возвращаемый объект необходимо клонировать, т.е. использовать метод clone().

Слайд 121
Описание слайда:
Интерфейсы. Example 33 Результат выполнения программы: Year: 2008 mounth: 7 day: 3 Year: 2008 mounth: 7 day: 3 Year: 2008 mounth: 7 day: 3 Year: 2008 mounth: 3 day: 3

Слайд 122
Описание слайда:
Интерфейсы Метод clone() существует практически во всех библиотечных классах. Однако, в классах, разрабатываемых самим программистом, метод clone() наследуется из класса Object, который умеет копировать лишь поля. Следовательно, если вызывать унаследованный метод clone() опять получиться ситуация, когда разные ссылки указывают на один и тот же объект (такое клонирование называют поверхностным). Часто объекты содержат подобъекты (ссылки на другие объекты), и, чтобы получить их копию, необходимо переопределять метод clone() (выполнять глубокое копирование).

Слайд 123
Описание слайда:
Интерфейсы Для того, чтобы переопределить метод clone() необходимо реализовать интерфейс Cloneable и описать метод clone() с модификатором public. Интерфейс Cloneable не содержит методов относится к помеченным (tagged) интерфейсам, а его реализация гарантирует, что метод clone() класса Object возвратит точную копию вызвавшего его объекта с воспроизведением значений всех его полей. В противном случае метод генерирует исключение CloneNotSupportedException.

Слайд 124
Описание слайда:
Интерфейсы Класс Object содержит protected-метод clone(), осуществляющий побитовое копирование объекта производного класса. Сначала необходимо переопределить метод clone() как public для обеспечения возможности вызова из другого пакета. В переопределенном методе следует вызвать базовую версию метода super.clone(), которая и выполняет собственно клонирование. Чтобы окончательно сделать объект клонируемым, класс должен реализовать интерфейс Cloneable.

Слайд 125
Описание слайда:
Интерфейсы. Example 34

Слайд 126
Описание слайда:
Интерфейсы. Example 35

Слайд 127
Описание слайда:
Интерфейсы. Example 35

Слайд 128
Описание слайда:
Интерфейсы. Example 36 Сравнение объектов. Интерфейс Comparable. Метод sort(…) класса Arrays позволяет упорядочивать массив, переданный ему в качестве параметра. Для элементарных типов правила определения больше/меньше известны.

Слайд 129
Описание слайда:
Интерфейсы Также этот метод упорядочивает и массив объектов при одном условии: объекты массива должны принадлежать классу, реализующему интерфейс Comparable. Класс, реализующий интерфейс Comparable должен иметь метод compareTo(). Естественно, вызов x.compareTo() должен действительно уметь сравнивать два объекта.

Слайд 130
Описание слайда:
Интерфейсы. Example 37 import java.util.Date; public class Book implements Comparable, Cloneable{ private String title; private int yearPublished; private int price; private Date date; public Book() {} public Book(String title, int yearPublished, int price, Date date){ this.title = title; this.yearPublished = yearPublished; this.price = price; this.date = date; // внимательно изучите эту строку // определите в ней потенциальную опасность } public String getTitle() { return title; } public int getYearPublished() { return yearPublished; } public int getPrice(){ return price;} public void printReport(){System.out.println("Название: "+title+ " год издания: "+year_published+" цена: "+price); }

Слайд 131
Описание слайда:
Интерфейсы. Example 37 public int compareTo(Object object) { Book book=null; if(object instanceof Book) book = (Book)object; else {/*возбуждаем исключение*/} if ( price < book.price ) return -1; else if ( price > book.price ) return 1; else return 0; } public Object clone() { Book book = new Book(); book.title = title; book.year_published = year_published; book.price = price; book.date = (Date)date.clone(); return book; } }

Слайд 132
Описание слайда:
Введение в Design Patterns

Слайд 133
Описание слайда:
Введение в Design Patterns Шаблон это идея, метод решения, общий подход к целому классу задач, постоянно встречающихся на практике систематизация приемов программирования и принципов организации классов Основные принципы объектно-ориентированного проектирования, применяемого при создании диаграммы классов и распределения обязанностей между ними, систематизированы в шаблонах GRASP (General Responsibility Assignment Software Patterns)

Слайд 134
Описание слайда:
Введение в Design Patterns

Слайд 135
Описание слайда:
Введение в Design Patterns

Слайд 136
Описание слайда:
Введение в Design Patterns. Example 38

Слайд 137
Описание слайда:
Введение в Design Patterns. Example 38

Слайд 138
Описание слайда:
Введение в Design Patterns. Example 39

Слайд 139
Описание слайда:
Введение в Design Patterns

Слайд 140
Описание слайда:
Введение в Design Patterns. Example 40

Слайд 141
Описание слайда:
Введение в Design Patterns

Слайд 142
Описание слайда:
Введение в Design Patterns. Example 41

Слайд 143
Описание слайда:
Введение в Design Patterns. Example 41

Слайд 144
Описание слайда:
Введение в Design Patterns

Слайд 145
Описание слайда:
Введение в Design Patterns. Example 42

Слайд 146
Описание слайда:
Введение в Design Patterns. Example 42

Слайд 147
Описание слайда:
Введение в Design Patterns. Example 42

Слайд 148
Описание слайда:
Введение в Design Patterns

Слайд 149
Описание слайда:
Введение в Design Patterns Преимущества использования шаблонов: Нет необходимости решать каждую задачу с нуля Использование проверенных решений Можно заранее представить последствия выбора того или иного варианта Проектирование с учетом будущих изменений Компактный код, который легко можно будет использовать повторно

Слайд 150
Описание слайда:
Ihar Blinou, PhD Java.SE.02 Object-oriented programming in Java


Скачать презентацию на тему Java.SE.02. Object-oriented programming in Java можно ниже:

Похожие презентации