Upload
cs-center
View
115
Download
0
Embed Size (px)
DESCRIPTION
* Основы ООП. * Класс, интерфейс, перечисление. * Аннотации. * Модификаторы доступа. * Вложенные классы. * Наследование. * Пакеты.
Citation preview
Объекты, классы и пакеты в Java
Алексей Владыкин
22 сентября 2014
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 1 / 36
1 Основы ООП
2 Классы
3 Наследование
4 Пакеты
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 2 / 36
Основы ООП
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 3 / 36
Основы ООП
Определение ООП
Объект — это мыслимая или реальная сущность, обладающаяхарактерным поведением и отличительными характеристиками иявляющаяся важной в предметной области
Гради Буч
Объектно-ориентированное программирование — парадигмапрограммирования, в которой программа строится извзаимодействующих объектов
Ср.: процедурное, функциональное, логическое программирование
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 4 / 36
Основы ООП
Свойства объекта
Объект является экземпляром класса
Объект имеет внутреннее состояние
Объект может принимать сообщения(в большинстве языков сообщение = вызов метода)
Объект — это «умные данные»
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 5 / 36
Основы ООП
Возможности ООП
ИнкапсуляцияСокрытие деталей реализации за внешним интерфейсом
НаследованиеСоздание производных классов, наследующих свойства базового
ПолиморфизмРазная обработка сообщений в разных классах
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 6 / 36
Основы ООП
ООП в Java
Поддержка ООП заложена в Java изначально(инкапсуляция, наследование, полиморфизм)
В Java все является объектом, кроме примитивных типов
Исполняемый код может находиться только в классе
Стандартная библиотека предоставляет огромное количествоклассов, но можно свободно создавать свои
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 7 / 36
Классы
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 8 / 36
Классы
Объявление класса
/* modifiers */ class Example {
/* class content: fields and methods */
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 9 / 36
Классы
Модификаторы доступа
publicдоступ для всех
protectedдоступ в пределах пакета и дочерних классов
privateдоступ в пределах класса
по умолчанию (нет ключевого слова)доступ в пределах пакета
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 10 / 36
Классы
Вложенные классы
Можно объявить класс внутри другого класса
Такие классы имеют доступ к private-членам друг друга
Экземпляр вложенного класса связан с экземпляром внешнегокласса
Если связь не нужна, вложенный класс объявляют смодификатором static
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 11 / 36
Классы
Поля
class Example {
/* modifiers */ int number;/* modifiers */ String text = "hello";
}
Поля инициализируются значениями по умолчаниюМодификатор final — значение должно быть присвоено ровноодин раз к моменту завершения инициализации экземпляра
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 12 / 36
Классы
Методы
class Example {
private int number;
/* modifiers */ int getNumber () {return number;
}
}
Возможна перегрузка методов(несколько одноименных методов с разными параметрами)
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 13 / 36
Классы
Конструкторы
class Example {
private int number;
/* modifiers */ Example(int number) {this.number = number;
}
}
Если не объявлен ни один конструктор, автоматически создаетсяконструктор по умолчанию (без параметров)
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 14 / 36
Классы
Деструктор
В Java нет деструкторов, сбор мусора автоматический
Есть метод void finalize(), но пользоваться им нерекомендуется
При необходимости освободить ресурсы заводят обычный методvoid close() или void dispose()
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 15 / 36
Классы
Принцип «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
Классы
Статические поля и методы
class Example {
/* modifiers */ static finalint DEFAULT_NUMBER = 333;
/* modifiers */ static int getDefaultNumber () {return DEFAULT_NUMBER;
}
}
Статические поля и методы относятся не к экземпляру класса, ако всему классу
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 17 / 36
Классы
Доступ к статическим членам
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
Классы
Интерфейсы
Интерфейс определяет возможные сообщения,но не их реализацию
interface Interface1 {int getNumber ();
}
Класс может реализовывать несколько интерфейсов
class Example implements Interface1 , Interface2 {int getNumber () {
// implementation}// other methods
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 19 / 36
Классы
Перечисления
Класс с фиксированным количеством экземпляровМожет иметь поля и методы
enum Direction {LEFT ,RIGHT ,UP,DOWN
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 20 / 36
Классы
Аннотации
Метаданные к элементам программыОтсутствует исполняемый код
import java.lang.annotation .*;
@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@interface Version {
String value ();String date() default "";
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 21 / 36
Наследование
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 22 / 36
Наследование
Объявление класса-наследника
class Derived extends Example {
/* derived class content */
}
Java не поддерживает множественное наследование,но есть интерфейсыВсе классы наследуют java.lang.Object
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 23 / 36
Наследование
Конструктор класса-наследника
class Derived extends Example {
Derived () {this (10);
}
Derived(int number) {super(number );
}
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 24 / 36
Наследование
Переопределение методов
class Derived extends Example {
@Overrideint getNumber () {
int number = super.getNumber ();return Math.max(10, number );
}
}
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 25 / 36
Наследование
Полиморфизм в действии
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
Наследование
Liskov Substitution Principle
Если S является подтипом T , тогда объекты типа T в программемогут быть замещены объектами типа S без каких-либоизменений желательных свойств этой программы
Поведение наследуемых классов не должно противоречитьповедению, заданному базовым классом, то есть поведениенаследуемых классов должно быть ожидаемым для кода,использующего переменную базового типа.
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 27 / 36
Наследование
Оператор 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
Наследование
Модификатор final
final class Example {...}нельзя создать класс-наследник
final int getNumber() {...}нельзя переопределить метод в дочернем классе
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 29 / 36
Наследование
Модификатор abstract
abstract class Example {...}нельзя создать экземпляр класса
abstract int getNumber();метод без реализации (класс должен быть абстрактным)
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 30 / 36
Пакеты
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 31 / 36
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36
Пакеты
Зачем нужны пакеты
Задание пространства имен,предотвращение коллизий имен классов
Логическая группировка связанных классов
Сокрытие деталей реализацииза счет модификаторов доступа
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 32 / 36
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2014;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2014;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36
Пакеты
Как работают пакеты
Задание пакета для класса:package ru.compscicenter.java2014;
Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import
Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2014/
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 33 / 36
Пакеты
Импорт
Импорт одного класса: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
Пакеты
Импорт
Импорт одного класса: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
Пакеты
Импорт
Импорт одного класса: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
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36
Пакеты
Как работает импорт
Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам
В class-файл попадают полные имена, подстановка содержимогоне происходит
При запуске программы все используемые классы должныприсутствовать в classpath
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 35 / 36
Что сегодня узнали
Что такое ООП
Как в Java объявить класс, создать его экземплярыи работать с ними
Как в Java реализуется инкапсуляция, наследованиеи полиморфизм
Что такое пакеты и как с ними работать
Алексей Владыкин Объекты, классы и пакеты в Java 22 сентября 2014 36 / 36