Основы объектно-ориентированного программирования

Содержание

Слайд 2

ООП Объектно-ориентированное программирование (ООП) – парадигма программирования, в которой основными концепциями являются понятия объектов и классов.

ООП

Объектно-ориентированное программирование (ООП) – парадигма программирования, в которой основными концепциями являются

понятия объектов и классов.
Слайд 3

Основные принципы ООП Все является объектом. Вычисления осуществляются путем взаимодействия (обмена

Основные принципы ООП

Все является объектом.
Вычисления осуществляются путем взаимодействия (обмена данными) между

объектами, при этом один объект требует от другого выполнить какое-либо действие.
Каждый объект имеет независимую память, которая состоит из других объектов.
Каждый объект является экземпляром класса, который выражает общие свойства объектов.
В классе задается функциональность объекта.
Классы организованы в единую древовидную структуру с общим корнем.
Слайд 4

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

Объекты

Объект обладает состоянием, поведением и идентичностью.
Структура и поведение схожих объектов определяет

общий для них класс.
Термины «экземпляр класса» и «объект» взаимозаменяемы.
Пример. Точка на плоскости с координатами (1,3) – объект или экземпляр класса «Точка».
Слайд 5

Состояние и поведение объекта Состояние объекта характеризуется перечнем всех свойств данного

Состояние и поведение объекта

Состояние объекта характеризуется перечнем всех свойств данного объекта

и текущими значениями каждого из этих свойств.
Пример. Свойства человека: фамилия, имя, отчество, пол, дата рождения, номер паспорта и т.д.
Пример. Свойства точки: координата по оси абсцисс, координата по оси ординат, цвет точки.
Поведение это то, как объект действует и реагирует.
Пример. Поведение человека: сидеть, ходить, спать, учиться и т.д.
Пример. Поведение точки: перемещаться по оси абсцисс, перемещаться по оси ординат, менять цвет.
Слайд 6

Программирование на языке Java Тема 33. Знакомство с классами

Программирование на языке Java

Тема 33. Знакомство с классами

Слайд 7

Класс Класс – центральный компонент Java. Класс образует основу ООП в

Класс

Класс – центральный компонент Java.
Класс образует основу ООП в среде Java.
Классы,

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

Класс Класс – некое множество объектов, имеющих общую структуру и общее

Класс

Класс – некое множество объектов, имеющих общую структуру и общее поведение.
Свойства

(поля) – состояния, которые может принимать объект.
Методы – виды поведения, которые может осуществлять объект.
Пример. Класс Человек, Класс Точка.
Слайд 9

Использование Java-классов Класс – программная единица, которая представляет: программу / модуль

Использование Java-классов

Класс – программная единица, которая представляет:
программу / модуль – программа,

которую можно выполнить, содержащая метод main;
шаблон для создания новых объектов – «схема» для нового типа данных.
Слайд 10

Аналогия со схемой Схема iPod Состояние: текущаяПесня громкость уровеньЗаряда Поведение: Включить/Выключить

Аналогия со схемой

Схема iPod
Состояние:
текущаяПесня
громкость
уровеньЗаряда
Поведение:
Включить/Выключить
СменитьПесню
ИзменитьГромкость
ВыбратьСлучайнуюПесню

iPod#1
Состояние:
текущаяПесня=“Help”
Громкость = 29
уровеньЗаряда = 34
Поведение:
Включить/Выключить

iPod#2
Состояние:
текущаяПесня=“Girl”
Громкость = 17
уровеньЗаряда =

95
Поведение:
Включить/Выключить

Слайд 11

Абстракция Абстракция – разделение между идеей и реализацией. В ООП можно

Абстракция

Абстракция – разделение между идеей и реализацией. В ООП можно использовать

объекты, не зная как они работают
Абстракция с iPod:
Вы понимаете внешнее поведение плеера (кнопки, экран);
Вы не знаете его внутреннее устройство
Но это и не нужно, чтобы пользоваться плеером!
Слайд 12

Общая форма класса class ИмяКласса { тип переменнаяЭкземпляра1; тип переменнаяЭкземпляра2; ...

Общая форма класса

class ИмяКласса {
тип переменнаяЭкземпляра1;
тип переменнаяЭкземпляра2;
...
тип переменнаяЭкземпляраn;
тип имяМетода1(список параметров) {


// тело метода
}
...
тип имяМетодаM(список параметров) {
// тело метода
}

имя класса

тип свойство1;
тип свойство2;
...
тип свойствоn;

Набор данных

тип имяМетода1(список параметров) {
// тело метода
}
...
тип имяМетодаM(список параметров) {
// тело метода
}

Поведение

Слайд 13

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

Члены класса

Данные, или переменные, определенные внутри класса, называются свойствами или полями.
Код

класса находится внутри методов.
Членами класса – называются свойства и методы, определенные внутри класса.
Внимание! Общая форма класса не содержит метода main(), он не является обязательным для класса.
Метод main() служит начальной точкой программы.
Слайд 14

Простой класс – 1 class Box { double width; double height;

Простой класс – 1

class Box {
double width;
double height;
double depth;
}

Свойства: ширина, высота,

глубина

Код класса Box (прямоугольный параллелепипед):

Слайд 15

Простой класс – 2 Класс определяет новый тип данный, в данном

Простой класс – 2

Класс определяет новый тип данный, в данном случае

тип данных Box.
Объявление class создает только шаблон, но не действительный объект.
Чтобы создать объект Box нужно использовать оператор вида:

Box myBox = new Box();

Создание объекта myBox типа Box

MyBox – экземпляр класса Box.
При каждом создании экземпляра класса создается новый объект, который содержит собственную копию каждого свойства класса, определенной классом.

Слайд 16

Простой класс – 3 Доступ к переменным экземпляра можно получить применением

Простой класс – 3

Доступ к переменным экземпляра можно получить применением операции

точка (.).

Box myBox = new Box();
myBox.width = 10;

Присвоение переменной width объекта myBox значения 10

Операцию точка используют для доступа к переменным экземпляра класса и методам внутри объекта.

Слайд 17

Простой класс – 4 class Box { double width; double height;

Простой класс – 4

class Box {
double width;
double height;
double depth;
}
class BoxDemo {

public static void main(String[] args) {
Box myBox = new Box();
myBox.width = 10;
myBox.height = 20;
myBox.depth = 15;
double vol = myBox.width * myBox.height * myBox.depth;
printf(“V = %f”, vol);
}}

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

Объявление класса BoxDemo и метода main

Создание экземпляра класса Box

Присвоение переменным экземпляра значений

Вычисление объема

Вывод:
V = 3000.0

Слайд 18

Простой класс – 5 Каждый объект содержит собственные копии переменных экземпляра.

Простой класс – 5

Каждый объект содержит собственные копии переменных экземпляра.
Т.о.

при наличии двух объектов Box каждый будет содержать собственные копии переменных width, height, depth.
Изменения переменных одного экземпляра класса не влияют на переменные другого экземпляра этого же класса.
Слайд 19

Простой класс – 6 class BoxDemo { public static void main(String[]

Простой класс – 6

class BoxDemo {
public static void main(String[] args)

{
Box myBox1 = new Box();
Box myBox2 = new Box();
myBox1.width = 10;
myBox1.height = 20;
myBox1.depth = 15;
myBox2.width = 3;
myBox2.height = 6;
myBox2.depth = 9;
double vol = myBox1.width * myBox1.height * myBox1.depth;
printf(“V = %f\n”, vol);
vol = myBox2.width * myBox2.height * myBox2.depth;
printf(“V = %f”, vol);
}}

Вывод:
V = 3000.0
V = 162.0

Слайд 20

Объявление объектов – 1 Создание объектов класса – двухступенчатый процесс: Создание

Объявление объектов – 1

Создание объектов класса – двухступенчатый процесс:
Создание переменной типа

класса (переменная не определяет объект, она может только ссылаться на объект).
Получение действительной, физической копии объекта и присвоение ее переменной – выполняется с помощью операции new.
Операция new динамически (во время выполнения программы) распределяет память под объект и возвращает ссылку на него. Ссылка сохраняется в переменной.
Слайд 21

Объявление объектов – 2 Объявление ссылки на объект. Переменная myBox содержит

Объявление объектов – 2

Объявление ссылки на объект. Переменная myBox содержит значение

null (пустая ссылка). Попытка использовать переменную myBox приведет к возникновению ошибки.

Box myBox;

myBox = new Box();

Распределение памяти под реальный объект Box. Присваивание переменной myBox ссылки на этот объект. Переменную myBox можно использовать как ссылку на объект Box.

Слайд 22

Присваивание переменным объектных ссылок Внимание! Обе переменные b1 и b2 будут

Присваивание переменным объектных ссылок

Внимание! Обе переменные b1 и b2 будут ссылаться

на один и тот же объект.
Любые изменения, выполненные в объекте через b2, окажут влияние на объект, на который ссылается переменная b1, т.к. это один и тот же объект.

Box b1 = new Box();
Box b2 = b1;

Создается не копия объекта, а копия ссылки

Слайд 23

Методы – 1 Общая форма объявления метода: тип имяМетода(список параметров) {

Методы – 1

Общая форма объявления метода:

тип имяМетода(список параметров) {
// тело

метода
}

тип – тип данных, возвращаемый методом, может быть:
простым типом (byte, short, int, long, float, double, char, boolean);
типом класса, созданным программистом;
void (не возвращает значения).
Список параметров – последовательность пар «тип идентификатор», разделенных запятыми

Слайд 24

Методы – 2 Если тип возвращаемого значения отличается от void, то

Методы – 2

Если тип возвращаемого значения отличается от void, то метод

должен возвращать значение вызывающему методу с помощью оператора return:

return значение;

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

Слайд 25

Добавление метода классу Box class Box { double width; double height;

Добавление метода классу Box

class Box {
double width;
double height;
double

depth;
void volume() {
printf(“V=%f”, width * height * depth);
}
}

Метод volume() выводит на экран объем объекта

Слайд 26

Вызов метода класса Box – 1 class BoxDemo { public static

Вызов метода класса Box – 1

class BoxDemo {
public static void

main(String[] args) {
Box myBox1 = new Box();
Box myBox2 = new Box();
myBox1.width = 10;
myBox1.height = 20;
myBox1.depth = 15;
myBox2.width = 3;
myBox2.height = 6;
myBox2.depth = 9;
myBox1.volume();
myBox2.volume();
}}

Вывод:
V = 3000.0
V = 162.0

Слайд 27

Вызов метода класса Box – 2 myBox1.volume(); Обращение к объекту myBox1

Вызов метода класса Box – 2

myBox1.volume();

Обращение к объекту myBox1

Вызов метода volume()

по отношению к объекту myBox1
Слайд 28

Возвращение значения – 1 class Box { double width; double height;

Возвращение значения – 1

class Box {
double width;
double height;
double

depth;
void volume() {
printf(“V=%f”, width * height * depth);
}
}

double volume() {
return width * height * depth;
}

Слайд 29

Возвращение значения – 2 class BoxDemo { public static void main(String[]

Возвращение значения – 2

class BoxDemo {
public static void main(String[] args)

{
Box myBox1 = new Box();
Box myBox2 = new Box();
myBox1.width = 10;
myBox1.height = 20;
myBox1.depth = 15;
myBox2.width = 3;
myBox2.height = 6;
myBox2.depth = 9;
printf(“V = %f”, myBox1.volume());
printf(“V = %f”, myBox2.volume());
}}

Вывод:
V = 3000.0
V = 162.0

Слайд 30

Методы чтения (Accessors, Getter) Метод чтения – метод, который предоставляет информацию

Методы чтения (Accessors, Getter)

Метод чтения – метод, который предоставляет информацию о

состоянии объекта.

class Box {
double width;
double height;
double depth;
double getWidth() {
return width;
}
}

Метод чтения свойства width

Слайд 31

Методы-модификаторы (Mutators, Setter) Метод-модификатор – метод, который изменяет внутреннее состояние объекта.

Методы-модификаторы (Mutators, Setter)

Метод-модификатор – метод, который изменяет внутреннее состояние объекта.

class Box

{
double width;
double height;
double depth;
double setWidth(double value) {
if (value > 0)
width = value;
}
}

Метод-модификатор свойства width

Слайд 32

Метод с параметрами class Box { double width; double height; double

Метод с параметрами

class Box {
double width;
double height;
double depth;

double volume() {
return width * height * depth;
}
void setDim(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
}

Метод setDim() устанавливает размеры параллелепипеда

Слайд 33

Вызов метода setDim – 1 class BoxDemo { public static void

Вызов метода setDim – 1

class BoxDemo {
public static void main(String[]

args) {
Box myBox1 = new Box();
Box myBox2 = new Box();
myBox1.width = 10;
myBox1.height = 20;
myBox1.depth = 15;
myBox2.width = 3;
myBox2.height = 6;
myBox2.depth = 9;
printf(“V = %f”, myBox1.volume());
printf(“V = %f”, myBox2.volume());
}
}

myBox1.setDim(10, 20, 15);

myBox2.setDim(3, 6, 9);

Слайд 34

Вызов метода setDim – 2 Было бы проще и удобнее, если

Вызов метода setDim – 2

Было бы проще и удобнее, если бы

все действия по установке переменных выполнялись при создании объекта.
Такая автоматическая инициализация при создании осуществляется с помощью конструктора.
Слайд 35

Программирование на языке Java Тема 34. Конструкторы

Программирование на языке Java

Тема 34. Конструкторы

Слайд 36

Конструктор класса Конструктор класса – специальный блок инструкций, вызываемый при создании

Конструктор класса

Конструктор класса – специальный блок инструкций, вызываемый при создании объекта.
Конструктор

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

Особенности конструктора класса Имя конструктора совпадаем с именем класса, в котором

Особенности конструктора класса

Имя конструктора совпадаем с именем класса, в котором он

находится.
Конструкторы не имеют четко определенного типа возвращаемых данных, даже типа void.
Конструктор автоматически вызывается непосредственно после создания объекта, перед завершением выполнения операции new.
Конструкторы не могут напрямую вызываться (необходимо использовать ключевое слово new).
Слайд 38

Пример конструктора класса Box – 1 class Box { double width;

Пример конструктора класса Box – 1

class Box {
double width;
double

height;
double depth;
double volume() {
return width * height * depth;
}
void setDim(double w, double h, double d) {
width = w;
height = h;
depth = d;
}
}

Box() {
println(“Конструирование объекта Box”);
width = 10;
height = 10;
depth = 10;
}

Конструктор класса Box

Внимание! Вывод текста только для демонстрации работы конструктора.

Слайд 39

Пример конструктора класса Box – 2 class BoxDemo { public static

Пример конструктора класса Box – 2

class BoxDemo {
public static void

main(String[] args) {
Box myBox1 = new Box();
myBox1.setDim(10, 20, 15);
Box myBox2 = new Box();
myBox2.setDim(3, 6, 9);
printf(“V = %f”, myBox1.volume());
printf(“V = %f”, myBox2.volume());
}
}

Box myBox1 = new Box();

Box myBox2 = new Box();

Вывод:
V = 1000.0
V = 1000.0

Слайд 40

Конструкторы c параметрами Конструктор с параметрами – способ конструирования объектов с различными значениями переменных экземпляра.

Конструкторы c параметрами

Конструктор с параметрами – способ конструирования объектов с различными

значениями переменных экземпляра.
Слайд 41

Пример конструктора с параметрами – 1 class Box { double width;

Пример конструктора с параметрами – 1

class Box {
double width;
double

height;
double depth;
double volume() {
return width * height * depth;
}
Box() {
println(“Конструирование объекта Box”);
width = 10;
height = 10;
depth = 10;
}
}

Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}

Конструктор с параметрами класса Box

Слайд 42

Пример конструктора с параметрами – 2 class BoxDemo { public static

Пример конструктора с параметрами – 2

class BoxDemo {
public static void

main(String[] args) {
Box myBox1 = new Box();
Box myBox2 = new Box();
printf(“V = %f”, myBox1.volume());
printf(“V = %f”, myBox2.volume());
}
}

Box myBox1 = new Box(10, 20, 15);

Вывод:
V = 3000.0
V = 162.0

Box myBox2 = new Box(3, 6, 9);

Слайд 43

Ключевое слово this Ключевое слово this используется в методах класса для

Ключевое слово this

Ключевое слово this используется в методах класса для ссылки

на вызвавший метод объект.
Ключевое слово this может использоваться внутри любого метода для ссылки на текущий объект.
Версия конструктора класса Box:

Box(double w, double h, double d) {
width = w;
height = h;
depth = d;
}

this.width = w;
this.height = h;
this.depth = d;

Слайд 44

Сокрытие переменной экземпляра В Java не допускается объявление двух локальных переменных

Сокрытие переменной экземпляра

В Java не допускается объявление двух локальных переменных с

одним и тем же именем.
Если имя локальной переменной совпадает с именем переменной экземпляра, то локальная переменная скрывает переменную экземпляра.

Box(double width, double height, double depth)
{
width = width;
height = height;
depth = depth;
}

Ссылки на локальные переменные, но не на переменные экземпляра класса

this.width = width;
this.height = height;
this.depth = depth;

Ссылки на переменные экземпляра класса

Ссылки на локальные переменные

Слайд 45

Печать объекта По-умолчанию Java не знает как напечатать объект. class BoxDemo

Печать объекта

По-умолчанию Java не знает как напечатать объект.

class BoxDemo {
public

static void main(String[] args) {
Box myBox1 = new Box(10, 20, 30);
println(myBox1);
}
}

Box@9e8c34

Можно самостоятельно вывести состояние объекта

printf(“(%f, %f, %f)”, myBox1.width,
myBox1.height,
myBox1.depth);

Слайд 46

Метод toString Метод toString предназначен для описания преобразования из объека в

Метод toString

Метод toString предназначен для описания преобразования из объека в строку
Вызывается,

когда происходит попытка печати объекта или конкатенация со строкой.
В каждом классе есть метод toString, даже если его нет в исходном коде класса. По умолчанию он возвращает имя класса и число в 16-ой с/с