Java, осень 2014: Объекты, классы и пакеты в Java
description
Transcript of Java, осень 2014: Объекты, классы и пакеты в Java
![Page 1: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/1.jpg)
Объекты, классы и пакеты в Java
Алексей Владыкин
22 сентября 2014
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 1 / 36
![Page 2: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/2.jpg)
1 Основы ООП
2 Классы
3 Наследование
4 Пакеты
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 2 / 36
![Page 3: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/3.jpg)
Основы ООП
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 3 / 36
![Page 4: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/4.jpg)
Основы ООП
Определение ООП
Объект — это мыслимая или реальная сущность, обладающаяхарактерным поведением и отличительными характеристиками иявляющаяся важной в предметной области
Гради Буч
Объектно-ориентированное программирование — парадигмапрограммирования, в которой программа строится извзаимодействующих объектов
Ср.: процедурное, функциональное, логическое программирование
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 4 / 36
![Page 5: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/5.jpg)
Основы ООП
Свойства объекта
Объект является экземпляром класса
Объект имеет внутреннее состояние
Объект может принимать сообщения(в большинстве языков сообщение = вызов метода)
Объект — это «умные данные»
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 5 / 36
![Page 6: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/6.jpg)
Основы ООП
Возможности ООП
ИнкапсуляцияСокрытие деталей реализации за внешним интерфейсом
НаследованиеСоздание производных классов, наследующих свойства базового
ПолиморфизмРазная обработка сообщений в разных классах
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 6 / 36
![Page 7: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/7.jpg)
Основы ООП
ООП в Java
Поддержка ООП заложена в Java изначально(инкапсуляция, наследование, полиморфизм)
В Java все является объектом, кроме примитивных типов
Исполняемый код может находиться только в классе
Стандартная библиотека предоставляет огромное количествоклассов, но можно свободно создавать свои
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 7 / 36
![Page 8: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/8.jpg)
Классы
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 8 / 36
![Page 9: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/9.jpg)
Классы
Объявление класса
/* modifiers */ class Example {
/* class content: fields and methods */
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 9 / 36
![Page 10: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/10.jpg)
Классы
Модификаторы доступа
publicдоступ для всех
protectedдоступ в пределах пакета и дочерних классов
privateдоступ в пределах класса
по умолчанию (нет ключевого слова)доступ в пределах пакета
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 10 / 36
![Page 11: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/11.jpg)
Классы
Вложенные классы
Можно объявить класс внутри другого класса
Такие классы имеют доступ к private-членам друг друга
Экземпляр вложенного класса связан с экземпляром внешнегокласса
Если связь не нужна, вложенный класс объявляют смодификатором static
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 11 / 36
![Page 12: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/12.jpg)
Классы
Поля
class Example {
/* modifiers */ int number;/* modifiers */ String text = "hello";
}
Поля инициализируются значениями по умолчаниюМодификатор final — значение должно быть присвоено ровноодин раз к моменту завершения инициализации экземпляра
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 12 / 36
![Page 13: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/13.jpg)
Классы
Методы
class Example {
private int number;
/* modifiers */ int getNumber () {return number;
}
}
Возможна перегрузка методов(несколько одноименных методов с разными параметрами)
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 13 / 36
![Page 14: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/14.jpg)
Классы
Конструкторы
class Example {
private int number;
/* modifiers */ Example(int number) {this.number = number;
}
}
Если не объявлен ни один конструктор, автоматически создаетсяконструктор по умолчанию (без параметров)
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 14 / 36
![Page 15: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/15.jpg)
Классы
Деструктор
В Java нет деструкторов, сбор мусора автоматический
Есть метод void finalize(), но пользоваться им нерекомендуется
При необходимости освободить ресурсы заводят обычный методvoid close() или void dispose()
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 15 / 36
![Page 16: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/16.jpg)
Классы
Принцип «Tell, Don’t Ask»
Procedural code gets information then makes decisions.Object-oriented code tells objects to do things.
Alec Sharp
Правильно: говорить объектам, что вам от них нужно
Неправильно: спрашивать у объекта его состояние и объяснятьему, что с ним делать дальше
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 16 / 36
![Page 17: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/17.jpg)
Классы
Статические поля и методы
class Example {
/* modifiers */ static finalint DEFAULT_NUMBER = 333;
/* modifiers */ static int getDefaultNumber () {return DEFAULT_NUMBER;
}
}
Статические поля и методы относятся не к экземпляру класса, ако всему классу
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 17 / 36
![Page 18: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/18.jpg)
Классы
Доступ к статическим членам
int defaultNumber = Example.DEFAULT_NUMBER;// defaultNumber -> 333
defaultNumber = Example.getDefaultNumber ();// defaultNumber -> 333
Example e = new Example (3);// possible , but discourageddefaultNumber = e.getDefaultNumber ();// defaultNumber -> 333
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 18 / 36
![Page 19: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/19.jpg)
Классы
Интерфейсы
Интерфейс определяет возможные сообщения,но не их реализацию
interface Interface1 {int getNumber ();
}
Класс может реализовывать несколько интерфейсов
class Example implements Interface1 , Interface2 {int getNumber () {
// implementation}// other methods
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 19 / 36
![Page 20: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/20.jpg)
Классы
Перечисления
Класс с фиксированным количеством экземпляровМожет иметь поля и методы
enum Direction {LEFT ,RIGHT ,UP,DOWN
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 20 / 36
![Page 21: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/21.jpg)
Классы
Аннотации
Метаданные к элементам программыОтсутствует исполняемый код
import java.lang.annotation .*;
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interface Version {
String value ();String date() default "";
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 21 / 36
![Page 22: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/22.jpg)
Наследование
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 22 / 36
![Page 23: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/23.jpg)
Наследование
Объявление класса-наследника
class Derived extends Example {
/* derived class content */
}
Java не поддерживает множественное наследование,но есть интерфейсыВсе классы наследуют java.lang.Object
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 23 / 36
![Page 24: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/24.jpg)
Наследование
Конструктор класса-наследника
class Derived extends Example {
Derived () {this (10);
}
Derived(int number) {super(number );
}
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 24 / 36
![Page 25: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/25.jpg)
Наследование
Переопределение методов
class Derived extends Example {
@Overrideint getNumber () {
int number = super.getNumber ();return Math.max(10, number );
}
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 25 / 36
![Page 26: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/26.jpg)
Наследование
Полиморфизм в действии
Example e = new Example (3);// e.getNumber () -> 3
e = new Derived (3);// e.getNumber () -> 10
Derived d = (Derived) e;// d.getNumber () -> 10
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 26 / 36
![Page 27: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/27.jpg)
Наследование
Liskov Substitution Principle
Если S является подтипом T , тогда объекты типа T в программемогут быть замещены объектами типа S без каких-либоизменений желательных свойств этой программы
Поведение наследуемых классов не должно противоречитьповедению, заданному базовым классом, то есть поведениенаследуемых классов должно быть ожидаемым для кода,использующего переменную базового типа.
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 27 / 36
![Page 28: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/28.jpg)
Наследование
Оператор instanceof
Позволяет проверить тип объекта в момент исполненияпрограммы
Example e = new Example (3);// e instanceof Object -> true// e instanceof Example -> true// e instanceof Derived -> false
e = new Derived (3);// e instanceof Object -> true// e instanceof Example -> true// e instanceof Derived -> true
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 28 / 36
![Page 29: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/29.jpg)
Наследование
Модификатор final
final class Example {...}нельзя создать класс-наследник
final int getNumber() {...}нельзя переопределить метод в дочернем классе
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 29 / 36
![Page 30: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/30.jpg)
Наследование
Модификатор abstract
abstract class Example {...}нельзя создать экземпляр класса
abstract int getNumber();метод без реализации (класс должен быть абстрактным)
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 30 / 36
![Page 31: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/31.jpg)
Пакеты
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 31 / 36
![Page 32: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/32.jpg)
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36
![Page 33: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/33.jpg)
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36
![Page 34: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/34.jpg)
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36
![Page 35: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/35.jpg)
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2014;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36
![Page 36: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/36.jpg)
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2014;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36
![Page 37: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/37.jpg)
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2014;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36
![Page 38: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/38.jpg)
Пакеты
Импорт
Импорт одного класса:import ru.compscicenter.java2014.ExampleClass;
Импорт всех классов пакета:import ru.compscicenter.java2014.*;
Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 34 / 36
![Page 39: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/39.jpg)
Пакеты
Импорт
Импорт одного класса:import ru.compscicenter.java2014.ExampleClass;
Импорт всех классов пакета:import ru.compscicenter.java2014.*;
Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 34 / 36
![Page 40: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/40.jpg)
Пакеты
Импорт
Импорт одного класса:import ru.compscicenter.java2014.ExampleClass;
Импорт всех классов пакета:import ru.compscicenter.java2014.*;
Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 34 / 36
![Page 41: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/41.jpg)
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36
![Page 42: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/42.jpg)
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36
![Page 43: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/43.jpg)
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36
![Page 44: Java, осень 2014: Объекты, классы и пакеты в Java](https://reader033.fdocuments.net/reader033/viewer/2022050815/548b9a35b47959963d8b4766/html5/thumbnails/44.jpg)
Что сегодня узнали
Что такое ООП
Как в Java объявить класс, создать его экземплярыи работать с ними
Как в Java реализуется инкапсуляция, наследованиеи полиморфизм
Что такое пакеты и как с ними работать
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 36 / 36