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

Нажмите для полного просмотра!
Java.SE.02. Object-oriented programming in Java, слайд №1Java.SE.02. Object-oriented programming in Java, слайд №2Java.SE.02. Object-oriented programming in Java, слайд №3Java.SE.02. Object-oriented programming in Java, слайд №4Java.SE.02. Object-oriented programming in Java, слайд №5Java.SE.02. Object-oriented programming in Java, слайд №6Java.SE.02. Object-oriented programming in Java, слайд №7Java.SE.02. Object-oriented programming in Java, слайд №8Java.SE.02. Object-oriented programming in Java, слайд №9Java.SE.02. Object-oriented programming in Java, слайд №10Java.SE.02. Object-oriented programming in Java, слайд №11Java.SE.02. Object-oriented programming in Java, слайд №12Java.SE.02. Object-oriented programming in Java, слайд №13Java.SE.02. Object-oriented programming in Java, слайд №14Java.SE.02. Object-oriented programming in Java, слайд №15Java.SE.02. Object-oriented programming in Java, слайд №16Java.SE.02. Object-oriented programming in Java, слайд №17Java.SE.02. Object-oriented programming in Java, слайд №18Java.SE.02. Object-oriented programming in Java, слайд №19Java.SE.02. Object-oriented programming in Java, слайд №20Java.SE.02. Object-oriented programming in Java, слайд №21Java.SE.02. Object-oriented programming in Java, слайд №22Java.SE.02. Object-oriented programming in Java, слайд №23Java.SE.02. Object-oriented programming in Java, слайд №24Java.SE.02. Object-oriented programming in Java, слайд №25Java.SE.02. Object-oriented programming in Java, слайд №26Java.SE.02. Object-oriented programming in Java, слайд №27Java.SE.02. Object-oriented programming in Java, слайд №28Java.SE.02. Object-oriented programming in Java, слайд №29Java.SE.02. Object-oriented programming in Java, слайд №30Java.SE.02. Object-oriented programming in Java, слайд №31Java.SE.02. Object-oriented programming in Java, слайд №32Java.SE.02. Object-oriented programming in Java, слайд №33Java.SE.02. Object-oriented programming in Java, слайд №34Java.SE.02. Object-oriented programming in Java, слайд №35Java.SE.02. Object-oriented programming in Java, слайд №36Java.SE.02. Object-oriented programming in Java, слайд №37Java.SE.02. Object-oriented programming in Java, слайд №38Java.SE.02. Object-oriented programming in Java, слайд №39Java.SE.02. Object-oriented programming in Java, слайд №40Java.SE.02. Object-oriented programming in Java, слайд №41Java.SE.02. Object-oriented programming in Java, слайд №42Java.SE.02. Object-oriented programming in Java, слайд №43Java.SE.02. Object-oriented programming in Java, слайд №44Java.SE.02. Object-oriented programming in Java, слайд №45Java.SE.02. Object-oriented programming in Java, слайд №46Java.SE.02. Object-oriented programming in Java, слайд №47Java.SE.02. Object-oriented programming in Java, слайд №48Java.SE.02. Object-oriented programming in Java, слайд №49Java.SE.02. Object-oriented programming in Java, слайд №50Java.SE.02. Object-oriented programming in Java, слайд №51Java.SE.02. Object-oriented programming in Java, слайд №52Java.SE.02. Object-oriented programming in Java, слайд №53Java.SE.02. Object-oriented programming in Java, слайд №54Java.SE.02. Object-oriented programming in Java, слайд №55Java.SE.02. Object-oriented programming in Java, слайд №56Java.SE.02. Object-oriented programming in Java, слайд №57Java.SE.02. Object-oriented programming in Java, слайд №58Java.SE.02. Object-oriented programming in Java, слайд №59Java.SE.02. Object-oriented programming in Java, слайд №60Java.SE.02. Object-oriented programming in Java, слайд №61Java.SE.02. Object-oriented programming in Java, слайд №62Java.SE.02. Object-oriented programming in Java, слайд №63Java.SE.02. Object-oriented programming in Java, слайд №64Java.SE.02. Object-oriented programming in Java, слайд №65Java.SE.02. Object-oriented programming in Java, слайд №66Java.SE.02. Object-oriented programming in Java, слайд №67Java.SE.02. Object-oriented programming in Java, слайд №68Java.SE.02. Object-oriented programming in Java, слайд №69Java.SE.02. Object-oriented programming in Java, слайд №70Java.SE.02. Object-oriented programming in Java, слайд №71Java.SE.02. Object-oriented programming in Java, слайд №72Java.SE.02. Object-oriented programming in Java, слайд №73Java.SE.02. Object-oriented programming in Java, слайд №74Java.SE.02. Object-oriented programming in Java, слайд №75Java.SE.02. Object-oriented programming in Java, слайд №76Java.SE.02. Object-oriented programming in Java, слайд №77Java.SE.02. Object-oriented programming in Java, слайд №78Java.SE.02. Object-oriented programming in Java, слайд №79Java.SE.02. Object-oriented programming in Java, слайд №80Java.SE.02. Object-oriented programming in Java, слайд №81Java.SE.02. Object-oriented programming in Java, слайд №82Java.SE.02. Object-oriented programming in Java, слайд №83Java.SE.02. Object-oriented programming in Java, слайд №84Java.SE.02. Object-oriented programming in Java, слайд №85Java.SE.02. Object-oriented programming in Java, слайд №86Java.SE.02. Object-oriented programming in Java, слайд №87Java.SE.02. Object-oriented programming in Java, слайд №88Java.SE.02. Object-oriented programming in Java, слайд №89Java.SE.02. Object-oriented programming in Java, слайд №90Java.SE.02. Object-oriented programming in Java, слайд №91Java.SE.02. Object-oriented programming in Java, слайд №92Java.SE.02. Object-oriented programming in Java, слайд №93Java.SE.02. Object-oriented programming in Java, слайд №94Java.SE.02. Object-oriented programming in Java, слайд №95Java.SE.02. Object-oriented programming in Java, слайд №96Java.SE.02. Object-oriented programming in Java, слайд №97Java.SE.02. Object-oriented programming in Java, слайд №98Java.SE.02. Object-oriented programming in Java, слайд №99Java.SE.02. Object-oriented programming in Java, слайд №100Java.SE.02. Object-oriented programming in Java, слайд №101Java.SE.02. Object-oriented programming in Java, слайд №102Java.SE.02. Object-oriented programming in Java, слайд №103Java.SE.02. Object-oriented programming in Java, слайд №104Java.SE.02. Object-oriented programming in Java, слайд №105Java.SE.02. Object-oriented programming in Java, слайд №106Java.SE.02. Object-oriented programming in Java, слайд №107Java.SE.02. Object-oriented programming in Java, слайд №108Java.SE.02. Object-oriented programming in Java, слайд №109Java.SE.02. Object-oriented programming in Java, слайд №110Java.SE.02. Object-oriented programming in Java, слайд №111Java.SE.02. Object-oriented programming in Java, слайд №112Java.SE.02. Object-oriented programming in Java, слайд №113Java.SE.02. Object-oriented programming in Java, слайд №114Java.SE.02. Object-oriented programming in Java, слайд №115Java.SE.02. Object-oriented programming in Java, слайд №116Java.SE.02. Object-oriented programming in Java, слайд №117Java.SE.02. Object-oriented programming in Java, слайд №118Java.SE.02. Object-oriented programming in Java, слайд №119Java.SE.02. Object-oriented programming in Java, слайд №120Java.SE.02. Object-oriented programming in Java, слайд №121Java.SE.02. Object-oriented programming in Java, слайд №122Java.SE.02. Object-oriented programming in Java, слайд №123Java.SE.02. Object-oriented programming in Java, слайд №124Java.SE.02. Object-oriented programming in Java, слайд №125Java.SE.02. Object-oriented programming in Java, слайд №126Java.SE.02. Object-oriented programming in Java, слайд №127Java.SE.02. Object-oriented programming in Java, слайд №128Java.SE.02. Object-oriented programming in Java, слайд №129Java.SE.02. Object-oriented programming in Java, слайд №130Java.SE.02. Object-oriented programming in Java, слайд №131Java.SE.02. Object-oriented programming in Java, слайд №132Java.SE.02. Object-oriented programming in Java, слайд №133Java.SE.02. Object-oriented programming in Java, слайд №134Java.SE.02. Object-oriented programming in Java, слайд №135Java.SE.02. Object-oriented programming in Java, слайд №136Java.SE.02. Object-oriented programming in Java, слайд №137Java.SE.02. Object-oriented programming in Java, слайд №138Java.SE.02. Object-oriented programming in Java, слайд №139Java.SE.02. Object-oriented programming in Java, слайд №140Java.SE.02. Object-oriented programming in Java, слайд №141Java.SE.02. Object-oriented programming in Java, слайд №142Java.SE.02. Object-oriented programming in Java, слайд №143Java.SE.02. Object-oriented programming in Java, слайд №144Java.SE.02. Object-oriented programming in Java, слайд №145Java.SE.02. Object-oriented programming in Java, слайд №146Java.SE.02. Object-oriented programming in Java, слайд №147Java.SE.02. Object-oriented programming in Java, слайд №148Java.SE.02. Object-oriented programming in Java, слайд №149Java.SE.02. Object-oriented programming in Java, слайд №150

Содержание

Вы можете ознакомиться и скачать презентацию на тему Java.SE.02. Object-oriented programming in Java. Доклад-сообщение содержит 150 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Object-oriented programming in Java
Описание слайда:
Object-oriented programming in Java

Слайд 2






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

Слайд 3





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

Слайд 4





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

декларативные (declarative) языки, 
объектно-ориентированные (object-oriented).
Описание слайда:
Причины возникновения ООП Классификация языков (одна из ...) По одной из классификаций языки программирования делятся на: директивные (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
Описание слайда:
Классы и объекты Переменные класса и константы Данные – члены класса, которые называются полями или переменными класса, объявляются в классе следующим образом: cпецификатор тип имя; Cпецификаторы доступа: static public final private protected

Слайд 17





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

Слайд 18





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

Слайд 19





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

Слайд 20





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

Слайд 21





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

Слайд 22





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

Слайд 23





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

Слайд 24





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

Слайд 25





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

Слайд 26





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

Слайд 27





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

Слайд 28





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

Слайд 29





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

Слайд 30





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

Слайд 31





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

Слайд 32





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

Слайд 33





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

Слайд 34





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

Слайд 35





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

Слайд 36





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

Слайд 37





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

Слайд 38





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

Слайд 39





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

Слайд 40





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

Слайд 41





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

Слайд 42





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

Слайд 43





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

Слайд 44





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

Слайд 45





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

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

Слайд 46





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

Слайд 47





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

Слайд 48





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

Слайд 49





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

Слайд 50





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

Слайд 51





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

Слайд 52





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

Слайд 53





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

Слайд 54





Классы и объекты. Example 13
Результат:
Описание слайда:
Классы и объекты. 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() – возвращает представление объекта в виде строки.
Описание слайда:
Классы и объекты Класс 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.
Описание слайда:
Классы и объекты Переопределение метода 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() возвращает хэш-код объекта, вычисление которого управляется следующими соглашениями:
во время работы приложения значение хэш-кода объекта не изменяется, если объект не был изменен;
все одинаковые по содержанию объекты одного типа должны иметь одинаковые хэш-коды;
различные по содержанию объекты одного типа могут иметь различные хэш-коды.
Описание слайда:
Классы и объекты Переопределение метода hashCode() - метод int hashCode() возвращает хэш-код объекта, вычисление которого управляется следующими соглашениями: во время работы приложения значение хэш-кода объекта не изменяется, если объект не был изменен; все одинаковые по содержанию объекты одного типа должны иметь одинаковые хэш-коды; различные по содержанию объекты одного типа могут иметь различные хэш-коды.

Слайд 60





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

Слайд 61





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

Слайд 62





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

Слайд 63





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

Слайд 64





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

Слайд 65





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

Слайд 66





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

Слайд 67





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

Слайд 68





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

Слайд 69





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

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

Слайд 70





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

Слайд 71





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

Слайд 72





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

Слайд 73





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

Слайд 74





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

Слайд 75





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

Слайд 76





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

Слайд 77





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

Слайд 78





Наследование
Понятие наследования. Один класс может наследовать или расширять поля и методы другого класса с помощью ключевого слова extends. Класс, который выступает базой для расширения, называют суперклассом, класс, который непосредственно проводит расширение,  - подклассом. Подкласс имеет доступ ко всем открытым полям и методам суперкласса, так, словно они описаны в подклассе: производный класс не имеет доступа к закрытым полям и методам класса. Также подкласс может добавлять методы и переопределять методы.
Описание слайда:
Наследование Понятие наследования. Один класс может наследовать или расширять поля и методы другого класса с помощью ключевого слова 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);
    }
}
Описание слайда:
Наследование. 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();
    }
}
Описание слайда:
Наследование. 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();
	}
}
Описание слайда:
Наследование. 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.
Описание слайда:
Наследование. Example 18 В данной ситуации при компиляции в подклассе BaseCourseHelper создаются два метода. При обращении к методу getCourse() версия метода определяется «ранним связыванием» без использования полиморфизма, но при выполнении вызывается метод-подставка. Обращение к полю производится по типу ссылки, возвращаемой методом getCourse(), то есть к полю класса Course.

Слайд 85





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

Слайд 86





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

Слайд 87





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

Слайд 88





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

Слайд 89





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

Слайд 90





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

Слайд 91





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

Слайд 92





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

Слайд 93





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

Слайд 94





Наследование
Приведение типов при наследовании. Как известно, в языке Java каждая объектная переменная имеет тип, описывающий разновидность объекта, на который ссылается переменная, и все, что он может делать.
На основе описания классов компилятор проверяет, сужает или расширяет возможности класса программист, объявляющий переменную. Если переменной суперкласса присваивается объект подкласса, возможности класса сужаются, и компилятор без проблем позволяет программисту сделать это. Если, наоборот, объект суперкласса присваивается переменной подкласса, возможности класса расширяются, поэтому программист должен подтвердить это с помощью обозначения, предназначенного для приведения типов, указав в скобках имя подкласса (subclass).
Описание слайда:
Наследование Приведение типов при наследовании. Как известно, в языке 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();
    }
}
Описание слайда:
Наследование. 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.
Описание слайда:
Наследование При недопустимом преобразовании типов при выполнении программы система обнаружит несоответствие и возбудит исключительную ситуацию. Если её не перехватить, то работа программы будет остановлена. Следовательно, перед приведением типов следует проверить его на корректность. Делается это с помощью оператора 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());
            }
        }
    }
}
Описание слайда:
Наследование. 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 и могут содержать объявления абстрактных методов, которые не реализованы в этих классах. 
Объекты таких классов создать нельзя, можно создать объекты подклассов, которые реализуют эти методы. 
Абстрактные методы помещаются в абстрактных классах или интерфейсах, тела таких методов отсутствуют и реализуются в подклассах.
Описание слайда:
Наследование. 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();
	}
}
Описание слайда:
Наследование. 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;
    }
}
Описание слайда:
Наследование. 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;
}
Описание слайда:
Наследование. 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 полиморфизм неприменим
Описание слайда:
Наследование. Example 26 Статические методы при наследовании. Для статических методов в Java полиморфизм неприменим

Слайд 106





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

Слайд 107





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

Слайд 108





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

Слайд 109





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

Слайд 110





Интерфейсы. Example 28
Реализация интерфейса происходит в классе с помощью ключевого слова implements.
Если реализуемых интерфейсов несколько, то они перечисляются через запятую. Интерфейс считается реализованным, когда в классе и/или в его суперклассе реализованы все методы интерфейса.
Описание слайда:
Интерфейсы. 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());
    }
}
Описание слайда:
Интерфейсы. 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.
Интерфейс может быть расширен при помощи наследования от другого интерфейса, синтаксис в этом случае аналогичен синтаксисом наследования классов .
Описание слайда:
Интерфейсы Свойства интерфейсов. 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");
        }
    }
}
Описание слайда:
Интерфейсы. 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. Когда вложенный интерфейс использует вне области вложения, то он используется вместе с именем класса или интерфейса.
Описание слайда:
Интерфейсы. Example 30 Вложенные интерфейсы. Интерфейсы можно вложить (объявить членом) другого класса или интерфейса. В этом случае значение доступа может принимать значения public, private, protected. Когда вложенный интерфейс использует вне области вложения, то он используется вместе с именем класса или интерфейса.

Слайд 115





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

Слайд 116





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

Слайд 117





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

Слайд 118





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

Слайд 119





Интерфейсы. Example 32
Описание слайда:
Интерфейсы. 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().
Описание слайда:
Интерфейсы Результат программы следующий: 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
Описание слайда:
Интерфейсы. 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() (выполнять глубокое копирование).
Описание слайда:
Интерфейсы Метод clone() существует практически во всех библиотечных классах. Однако, в классах, разрабатываемых самим программистом, метод clone() наследуется из класса Object, который умеет копировать лишь поля. Следовательно, если вызывать унаследованный метод clone() опять получиться ситуация, когда разные ссылки указывают на один и тот же объект (такое клонирование называют поверхностным). Часто объекты содержат подобъекты (ссылки на другие объекты), и, чтобы получить их копию, необходимо переопределять метод clone() (выполнять глубокое копирование).

Слайд 123





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

Слайд 124





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

Слайд 125





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

Слайд 126





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

Слайд 127





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

Слайд 128





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

Слайд 129





Интерфейсы
Также этот метод упорядочивает и массив объектов при одном условии: объекты массива должны принадлежать классу, реализующему интерфейс Comparable. Класс, реализующий интерфейс Comparable должен иметь метод compareTo(). Естественно, вызов x.compareTo() должен действительно уметь сравнивать два объекта.
Описание слайда:
Интерфейсы Также этот метод упорядочивает и массив объектов при одном условии: объекты массива должны принадлежать классу, реализующему интерфейс 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); }
Описание слайда:
Интерфейсы. 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;
    }
}
Описание слайда:
Интерфейсы. 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
Описание слайда:
Введение в Design Patterns

Слайд 133





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

Слайд 134





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

Слайд 135





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

Слайд 136





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

Слайд 137





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

Слайд 138





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

Слайд 139





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

Слайд 140





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

Слайд 141





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

Слайд 142





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

Слайд 143





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

Слайд 144





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

Слайд 145





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

Слайд 146





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

Слайд 147





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

Слайд 148





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

Слайд 149





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

Слайд 150





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



Похожие презентации
Mypresentation.ru
Загрузить презентацию