2013 09 30_lecture_04

43
Классы, объекты и пакеты в Java Алексей Владыкин 30 сентября 2013 Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 1 / 35

Upload: cs-center

Post on 05-Dec-2014

2.902 views

Category:

Documents


1 download

DESCRIPTION

 

TRANSCRIPT

Page 1: 2013 09 30_lecture_04

Классы, объекты и пакеты в Java

Алексей Владыкин

30 сентября 2013

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 1 / 35

Page 2: 2013 09 30_lecture_04

1 Основы ООП

2 Классы

3 Наследование

4 Пакеты

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 2 / 35

Page 3: 2013 09 30_lecture_04

Основы ООП

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 3 / 35

Page 4: 2013 09 30_lecture_04

Основы ООП

Определение ООП

Объект — это мыслимая или реальная сущность, обладающаяхарактерным поведением и отличительными характеристиками иявляющаяся важной в предметной области

Гради Буч

Объектно-ориентированное программирование — парадигмапрограммирования, в которой программа строится извзаимодействующих объектов

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 4 / 35

Page 5: 2013 09 30_lecture_04

Основы ООП

Свойства объекта

Объект является экземпляром класса

Объект имеет внутреннее состояние

Объект может принимать сообщения(в большинстве языков сообщение = вызов метода)

Объект — это «умные данные»

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 5 / 35

Page 6: 2013 09 30_lecture_04

Основы ООП

Возможности ООП

ИнкапсуляцияСокрытие деталей реализации за внешним интерфейсом

НаследованиеСоздание производных классов, наследующих свойства базового

ПолиморфизмРазная обработка сообщений в разных классах

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 6 / 35

Page 7: 2013 09 30_lecture_04

Основы ООП

ООП в Java

Поддержка ООП заложена в Java изначально(инкапсуляция, наследование, полиморфизм)

В Java все является объектом, кроме примитивных типов

Исполняемый код может находиться только в классе

Стандартная библиотека предоставляет огромное количествоклассов, но можно свободно создавать свои

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 7 / 35

Page 8: 2013 09 30_lecture_04

Классы

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 8 / 35

Page 9: 2013 09 30_lecture_04

Классы

Объявление класса

/* modifiers */ class Example {

/* class content: fields and methods */

}

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 9 / 35

Page 10: 2013 09 30_lecture_04

Классы

Модификаторы доступа

publicдоступ для всех

protectedдоступ в пределах пакета и дочерних классов

privateдоступ в пределах класса

по умолчанию (нет ключевого слова)доступ в пределах пакета

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 10 / 35

Page 11: 2013 09 30_lecture_04

Классы

Вложенные классы

Можно объявить класс внутри другого класса

Такие классы имеют доступ к private-членам друг друга

Экземпляр вложенного класса связан с экземпляром внешнегокласса

Если связь не нужна, вложенный класс объявляют смодификатором static

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 11 / 35

Page 12: 2013 09 30_lecture_04

Классы

Поля

class Example {

/* modifiers */ int number;/* modifiers */ String text = "hello";

}

Поля инициализируются значениями по умолчаниюМодификатор final — значение должно быть присвоено ровноодин раз к моменту завершения инициализации экземпляра

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 12 / 35

Page 13: 2013 09 30_lecture_04

Классы

Методы

class Example {

private int number;

/* modifiers */ int getNumber () {return number;

}

}

Возможна перегрузка методов(несколько одноименных методов с разными параметрами)

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 13 / 35

Page 14: 2013 09 30_lecture_04

Классы

Конструкторы

class Example {

private int number;

/* modifiers */ Example(int number) {this.number = number;

}

}

Если не объявлен ни один конструктор, автоматически создаетсяконструктор по умолчанию (без параметров)

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 14 / 35

Page 15: 2013 09 30_lecture_04

Классы

Деструктор

В Java нет деструкторов, сбор мусора автоматический

Есть метод void finalize(), но пользоваться им нерекомендуется

При необходимости освободить ресурсы заводят обычный методvoid close() или void dispose()

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 15 / 35

Page 16: 2013 09 30_lecture_04

Классы

Принцип «Tell, Don’t Ask»

Procedural code gets information then makes decisions.Object-oriented code tells objects to do things.

Alec Sharp

Правильно: говорить объектам, что вам от них нужно

Неправильно: спрашивать у объекта его состояние и объяснятьему, что с ним делать дальше

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 16 / 35

Page 17: 2013 09 30_lecture_04

Классы

Статические поля и методы

class Example {

/* modifiers */ static finalint DEFAULT_NUMBER = 333;

/* modifiers */ static int getDefaultNumber () {return DEFAULT_NUMBER;

}

}

Статические поля и методы относятся не к экземпляру класса, ако всему классу

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 17 / 35

Page 18: 2013 09 30_lecture_04

Классы

Доступ к статическим членам

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 30 сентября 2013 18 / 35

Page 19: 2013 09 30_lecture_04

Классы

Интерфейсы

Интерфейс определяет возможные сообщения,но не их реализацию

interface Interface1 {int getNumber ();

}

Класс может реализовывать несколько интерфейсов

class Example implements Interface1 , Interface2 {int getNumber () {

// implementation}// other methods

}

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 19 / 35

Page 20: 2013 09 30_lecture_04

Классы

Перечисления

Класс с фиксированным количеством экземпляровМожет иметь поля и методы

enum Direction {LEFT ,RIGHT ,UP,DOWN

}

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 20 / 35

Page 21: 2013 09 30_lecture_04

Наследование

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 21 / 35

Page 22: 2013 09 30_lecture_04

Наследование

Объявление класса-наследника

class Derived extends Example {

/* derived class content */

}

Java не поддерживает множественное наследование,но есть интерфейсыВсе классы наследуют java.lang.Object

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 22 / 35

Page 23: 2013 09 30_lecture_04

Наследование

Конструктор класса-наследника

class Derived extends Example {

Derived () {this (10);

}

Derived(int number) {super(number );

}

}

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 23 / 35

Page 24: 2013 09 30_lecture_04

Наследование

Переопределение методов

class Derived extends Example {

@Overrideint getNumber () {

int number = super.getNumber ();return Math.max(10, number );

}

}

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 24 / 35

Page 25: 2013 09 30_lecture_04

Наследование

Полиморфизм в действии

Example e = new Example (3);// e.getNumber () -> 3

e = new Derived (3);// e.getNumber () -> 10

Derived d = (Derived) e;// d.getNumber () -> 10

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 25 / 35

Page 26: 2013 09 30_lecture_04

Наследование

Liskov Substitution Principle

Если S является подтипом T , тогда объекты типа T в программемогут быть замещены объектами типа S без каких-либоизменений желательных свойств этой программы

Поведение наследуемых классов не должно противоречитьповедению, заданному базовым классом, то есть поведениенаследуемых классов должно быть ожидаемым для кода,использующего переменную базового типа.

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 26 / 35

Page 27: 2013 09 30_lecture_04

Наследование

Оператор 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 30 сентября 2013 27 / 35

Page 28: 2013 09 30_lecture_04

Наследование

Модификатор final

final class Example {...}нельзя создать класс-наследник

final int getNumber() {...}нельзя переопределить метод в дочернем классе

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 28 / 35

Page 29: 2013 09 30_lecture_04

Наследование

Модификатор abstract

abstract class Example {...}нельзя создать экземпляр класса

abstract int getNumber();метод без реализации (класс должен быть абстрактным)

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 29 / 35

Page 30: 2013 09 30_lecture_04

Пакеты

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 30 / 35

Page 31: 2013 09 30_lecture_04

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35

Page 32: 2013 09 30_lecture_04

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35

Page 33: 2013 09 30_lecture_04

Пакеты

Зачем нужны пакеты

Задание пространства имен,предотвращение коллизий имен классов

Логическая группировка связанных классов

Сокрытие деталей реализацииза счет модификаторов доступа

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 31 / 35

Page 34: 2013 09 30_lecture_04

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2013;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2013/

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35

Page 35: 2013 09 30_lecture_04

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2013;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2013/

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35

Page 36: 2013 09 30_lecture_04

Пакеты

Как работают пакеты

Задание пакета для класса:package ru.compscicenter.java2013;

Использование класса из пакета:классы текущего пакета и пакета java.lang всегда видныклассы других пакетов доступны по полному имени с пакетомможно использовать директиву import

Класс, принадлежащий пакету, должен лежать в одноименнойдиректории:ru/compscicenter/java2013/

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 32 / 35

Page 37: 2013 09 30_lecture_04

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2013.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2013.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 33 / 35

Page 38: 2013 09 30_lecture_04

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2013.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2013.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 33 / 35

Page 39: 2013 09 30_lecture_04

Пакеты

Импорт

Импорт одного класса:import ru.compscicenter.java2013.ExampleClass;

Импорт всех классов пакета:import ru.compscicenter.java2013.*;

Импорт статических полей и методов:import static java.lang.System.out;import static java.util.Arrays.*;

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 33 / 35

Page 40: 2013 09 30_lecture_04

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35

Page 41: 2013 09 30_lecture_04

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35

Page 42: 2013 09 30_lecture_04

Пакеты

Как работает импорт

Директивы import позволяют компилятору получить полныеимена всех используемых классов, полей и методов по ихкоротким именам

В class-файл попадают полные имена, подстановка содержимогоне происходит

При запуске программы все используемые классы должныприсутствовать в classpath

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 34 / 35

Page 43: 2013 09 30_lecture_04

Что сегодня узнали

Что такое ООП

Как в Java объявить класс, создать его экземплярыи работать с ними

Как в Java реализуется инкапсуляция, наследованиеи полиморфизм

Что такое пакеты и как с ними работать

Алексей Владыкин Классы, объекты и пакеты в Java 30 сентября 2013 35 / 35