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

Содержание

Слайд 2

Задача Вывести клички всех кошек с возрастом больше одного года.

Задача

Вывести клички всех кошек с возрастом больше одного года.

Слайд 3

Решение 1 String firstCatName = "Барсик"; int firstCatAge = 3; String

Решение 1

String firstCatName = "Барсик";
int firstCatAge = 3;
String secondCatName = "Барсик";
int

secondCatAge = 5;
String thirdCatName = "Барсик";
int thirdCatAge = 1;
if (firstCatAge > 1) { System.out.println(firstCatName); }
if (secondCatAge > 1) { System.out.println(secondCatName); }
if (thirdCatAge > 1) { System.out.println(thirdCatName); }
Слайд 4

Решение 2 String catName[] = new String[3]; int catAge[] = new

Решение 2

String catName[] = new String[3];
int catAge[] = new int[3];
catName[0] =

"Барсик"; catAge[0] = 3;
catName[1] = "Барсик"; catAge[1] = 5;
catName[2] = "Барсик"; catAge[2] = 1;
for (int i = 0; i <3; i++) {
if (catAge[i] > 1) {
System.out.println(catName[i]);
}
Слайд 5

Что такое ООП? Концепция ООП предлагает оперировать в программе не переменными

Что такое ООП?

Концепция ООП предлагает оперировать в программе не переменными и

функциями, а объектами.
Всё в программе является объектами
У объекта имеются свойства и методы
Свойства представляют собой переменные, принадлежащие объекту
Методы – функции, позволяющие получить / изменить информацию об объекте
Слайд 6

Основные понятия ООП Абстракция Класс Объект Инкапсуляция Наследование Полиморфизм

Основные понятия ООП

Абстракция
Класс
Объект
Инкапсуляция
Наследование
Полиморфизм

Слайд 7

Абстракция Выделение значимых характеристик объекта, доступных остальной программе.

Абстракция

Выделение значимых характеристик объекта, доступных остальной программе.

Слайд 8

Абстракция кота

Абстракция кота

Слайд 9

Абстракция кота Значимые свойства Кличка Порода Цвет Рост Возраст Дата последнего

Абстракция кота

Значимые свойства

Кличка
Порода
Цвет
Рост
Возраст
Дата последнего кормления
Дата последнего мяукания

Незначимые свойства

Количество блох
Громкость мурлыкания

Слайд 10

Абстракция кота Значимое поведение Мяукнуть Поесть Потребовать погладить Погулять Незначимое поведение Рвать обои Испортить тапки

Абстракция кота

Значимое поведение

Мяукнуть
Поесть
Потребовать погладить
Погулять

Незначимое поведение

Рвать обои
Испортить тапки

Слайд 11

Абстракция кота class Cat { String name; int age; Date lastMeowDate;

Абстракция кота

class Cat {
String name;
int age;
Date lastMeowDate;
void

meow() {
System.out.println("Meow!");
lastMeowDate = new Date();
}
}
Слайд 12

Класс Описываемая на языке терминологии исходного кода модель ещё не существующей сущности (объекта).

Класс

Описываемая на языке терминологии исходного кода модель ещё не существующей сущности

(объекта).
Слайд 13

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

Инкапсуляция

Свойство системы, позволяющее объединить данные и методы, работающие с ними, в

классе.
Слайд 14

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

Объект

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (инстанцировании).
Кот –

класс
Кот Барсик - объект
Слайд 15

Объект Cat cat = new Cat(); cat.name = "Барсик"; cat.meow();

Объект

Cat cat = new Cat();
cat.name = "Барсик";
cat.meow();

Слайд 16

Сокрытие свойств: зачем? Cat cat = new Cat(); cat.name = "Барсик"; cat.age = -1;

Сокрытие свойств: зачем?

Cat cat = new Cat();
cat.name = "Барсик";
cat.age = -1;

Слайд 17

Модификаторы доступа private: члены класса доступны только внутри класса; «default» (package-private)

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

private: члены класса доступны только внутри класса;
«default» (package-private) (модификатор, по-умолчанию):

члены класса видны внутри пакета;
protected: члены класса доступны внутри пакета и в наследниках;
public: члены класс доступны всем;
Слайд 18

Модификаторы доступа static - ссылка этого поля у любого экземпляра класса

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

static - ссылка этого поля у любого экземпляра класса будет

ссылаться на одно и то же значение
final – это модификатор, позволяющий объявлять константные поля в классе.
Слайд 19

Доступ к сокрытым свойствам Класс: class Cat { private int age;

Доступ к сокрытым свойствам

Класс:

class Cat {
private int age;
public void

setAge(int age) {
if (age < 0) {
shutdownPC();
} else {
this.age = age;
}
}
public int getAge() {
return age;
}
}

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

Cat cat = new Cat();
cat.setAge(3);
System.out.println(cat.getAge());

Слайд 20

Указатель this Указатель на объект, из которого он был вызван. Cat

Указатель this

Указатель на объект, из которого он был вызван.
Cat cat =

new Cat();
cat.setAge(3); - В методе setAge указатель this будет ссылаться на объект cat
Слайд 21

Задание 1 Решить задачу с выборкой кошек по возрасту, используя ООП.

Задание 1
Решить задачу с выборкой кошек по возрасту, используя ООП.

Слайд 22

Перегрузка (Overloading) Создание метода с таким же именем, но с другим набором параметров.

Перегрузка (Overloading)
Создание метода с таким же именем, но с другим набором

параметров.
Слайд 23

Перегрузка методов public class Cat { public void eat() {} public

Перегрузка методов

public class Cat {
public void eat() {}
public void

eat(int size) {
for (int i = 0; i < size; i++) eat();
}
public void eat(Food food) {}
public void eat(Food food, int size) {
for (int i = 0; i < size; i++) eat(food);
}
}
Слайд 24

Конструкторы public class Cat { private String name; private int age;

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

public class Cat {
private String name;
private int age;
public

Cat() {
name= "Unnamed";
age = 0;
}
public Cat(String name) {
this.name = name;
age = 0;
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
}

public class Cat {
private String name;
private int age;
public Cat() {
this(“Unnamed”);
}
public Cat(String name) {
this.name = name;
age = 0;
}
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
}

Слайд 25

Конструктор vs Метод Конструктор class Cat { Cat() { } }

Конструктор vs Метод

Конструктор
class Cat {
Cat() {
}
}

Метод
class Cat {
void

Cat() {
}
}
Слайд 26

Задание 2 Модифицировать задачу с выборкой кошек по возрасту, используя конструкторы.

Задание 2
Модифицировать задачу с выборкой кошек по возрасту, используя конструкторы.

Слайд 27

Абстракция собаки

Абстракция собаки

Слайд 28

Собака vs Кот: Свойства Кот Кличка Порода Цвет Рост Возраст Дата

Собака vs Кот: Свойства

Кот

Кличка
Порода
Цвет
Рост
Возраст
Дата последнего кормления
Дата последнего мяукания

Собака

Кличка
Порода
Цвет
Рост
Возраст
Дата последнего кормления
Дата последнего

гавкания
Слайд 29

Собака vs Кот: Методы Кот Мяукнуть Поесть Потребовать погладить Погулять Собака Гавкнуть Поесть Потребовать погладить Выгуляться

Собака vs Кот: Методы

Кот

Мяукнуть
Поесть
Потребовать погладить
Погулять

Собака

Гавкнуть
Поесть
Потребовать погладить
Выгуляться

Слайд 30

Домашние животные

Домашние животные

Слайд 31

Наследование Cвойство системы, позволяющее описать новый класс на основе уже существующего

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

Cвойство системы, позволяющее описать новый класс на основе уже существующего с

частично или полностью заимствующейся функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.
Слайд 32

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

Принцип наследования

Общие свойства и методы объектов можно вынести в класс-«родитель». Все

«дети»-наследники автоматически получают их.
Слайд 33

Схема наследования

Схема наследования

Слайд 34

Класс домашних животных public class Pet { private String name; private

Класс домашних животных

public class Pet {
private String name;
private int

age;
public Pet() { this("Unnamed");}
public Pet(String name) {name = "Unnamed";}
public Pet(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public void requireToPat() {}
public String getType() { return "Домашнее животное"; }
}
Слайд 35

Класс кота public class Cat extends Pet { private Date lastMeowDate;

Класс кота

public class Cat extends Pet {
private Date lastMeowDate;
public

Cat() { this("Unnamed"); }
public Cat(String name) { super(name); }
public Cat(String name, int age) { super(name, age); }
@Override
public String getType() { return "Кот"; }
public void meow() {
System.out.println("Meow!");
lastMeowDate = new Date();
}
}
Слайд 36

super() Ссылка на базовый класс, которую можно использовать в дочерних классах

super()

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

Слайд 37

Переопределение (Overriding) Переписывание (переделывание, переопределение) в классе-потомке УЖЕ существующего метода класса-родителя.

Переопределение (Overriding)
Переписывание (переделывание, переопределение) в классе-потомке УЖЕ существующего метода класса-родителя.

Слайд 38

Аннотация Java Специальная форма синтаксических метаданных, которая может быть добавлена в

Аннотация Java

Специальная форма синтаксических метаданных, которая может быть добавлена в исходный

код. Аннотации используются для анализа кода, компиляции или выполнения. Аннотируемы пакеты, классы, методы, переменные и параметры.
Слайд 39

Аннотация @Override Проверяет, переопределён ли метод. Вызывает ошибку компиляции, если метод не найден в родительском классе;

Аннотация @Override

Проверяет, переопределён ли метод. Вызывает ошибку компиляции, если метод не

найден в родительском классе;
Слайд 40

UML – диаграмма классов UML = Unified Modeling Language

UML – диаграмма классов

UML = Unified Modeling Language

Слайд 41

Полиморфизм Свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации

Полиморфизм

Свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о

типе и внутренней структуре объекта. 
Слайд 42

Полиморфизм Pet pet1 = new Pet(); Pet pet2 = new Cat();

Полиморфизм

Pet pet1 = new Pet();
Pet pet2 = new Cat();
Pet pet3 =

new Dog();
pet1.getType();
pet2.getType();
pet3.getType();
Слайд 43

Тип ссылки vs Тип объекта Pet pet1 = new Pet(); Pet

Тип ссылки vs Тип объекта

Pet pet1 = new Pet();
Pet pet2 =

new Cat();
Pet pet3 = new Dog();
pet1.getType();
pet2.getType();
pet2.meow();
pet3.getType();
pet3.woof();
Слайд 44

Приведение типов Pet pet1 = new Pet(); Pet pet2 = new

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

Pet pet1 = new Pet();
Pet pet2 = new Cat(); //автоматическое
Pet

pet3 = new Dog(); //автоматическое
Cat cat = (Cat) pet2; cat.meow(); //явное
((Cat) pet2).meow(); //явное
Dog dog = (Dog) pet3; dog.woof(); //явное
((Dog) pet3).woof(); //явное
Слайд 45

Есть ли ошибки? (Pet) pet; (Pet) cat; (Pet) dog; Pet pet

Есть ли ошибки?

(Pet) pet;
(Pet) cat;
(Pet) dog;

Pet pet = new Pet();
Cat cat

= new Cat();
Dog dog = new Dog();

(Cat) pet;
(Cat) cat;
(Cat) dog;

(Dog) pet;
(Dog) cat;
(Dog) dog;

Слайд 46

Конечно есть! (Pet) pet; (Pet) cat; (Pet) dog; Pet pet =

Конечно есть!

(Pet) pet;
(Pet) cat;
(Pet) dog;

Pet pet = new Pet();
Cat cat =

new Cat();
Dog dog = new Dog();

(Cat) pet;
(Cat) cat;
(Cat) dog;

(Dog) pet;
(Dog) cat;
(Dog) dog;

Слайд 47

Типы ошибок в Java Ошибка компиляции (Cat) dog; (Dog) cat; Ошибка

Типы ошибок в Java

Ошибка компиляции

(Cat) dog;
(Dog) cat;

Ошибка времени выполнения

(Cat) pet;
(Dog) pet;

Слайд 48

Задание 3 Модифицировать задачу с выборкой кошек по возрасту, добавив в

Задание 3
Модифицировать задачу с выборкой кошек по возрасту, добавив в изначальный

список собак. К выводу клички добавить тип животного («кот Барсик», «собака Улыбака»).
Слайд 49

Класс Object Object Любой класс

Класс Object

Object

Любой класс

Слайд 50

Методы Object boolean equals(Object obj); String toString(); int hashCode(); Object clone();

Методы Object

boolean equals(Object obj);
String toString();
int hashCode();
Object clone();

Слайд 51

Задание 4 Создать класс комплексных чисел public class Complex { private

Задание 4

Создать класс комплексных чисел
public class Complex {
private int re;
private int

im;
Complex(int re, int im) { … }
@Override
public String equals(Object obj) { … }
@Override
public String toString() { … }
// Метод, реализующий операцию сложения
public Complex plus(Complex z) { … }
// Метод, реализующий операцию вычитания
public Complex minus(Complex z) { … }
}
Слайд 52

Задача 4 Создать класс для демонстрации работы класса комплексных чисел: public

Задача 4
Создать класс для демонстрации работы класса комплексных чисел:
public class ComplexTest

{
public static void main(String[] args) {
Complex z1 = new Complex(1, 0);
Complex z2 = new Complex(2, 3);
Complex z3 = new Complex(5, 10);
System.out.println("z1 = " + z1);
System.out.println("z2 = " + z2);
System.out.println("z3 = " + z3);
System.out.println("z1 + z2 = " + z1.plus(z2));
System.out.println("z1 - z3 = " + z1.minus(z3));
System.out.println(z1.equals(z3) ? “z1 == z3” : “z1 != z3”);
}
}
Слайд 53

Абстрактный класс Базовый класс, который не предполагает создания экземпляров.

Абстрактный класс
Базовый класс, который не предполагает создания экземпляров.

Слайд 54

Абстрактное животное public abstract class Pet { private String name; private

Абстрактное животное

public abstract class Pet {
private String name;
private int

age;
public Pet() { this("Unnamed");}
public Pet(String name) {name = "Unnamed";}
public Pet(String name, int age) {
this.name = name;
this.age = age;
}
public void setName(String name) { this.name = name; }
public String getName() { return name; }
public String getType() { return "Домашнее животное"; }
public abstract void say();
}
Слайд 55

Конкретный кот public class Cat extends Pet { private Date lastMeowDate;

Конкретный кот

public class Cat extends Pet {
private Date lastMeowDate;
public

Cat() { this("Unnamed"); }
public Cat(String name) { super(name); }
public Cat(String name, int age) { super(name, age); }
@Override
public String getType() { return "Кот"; }
@Override
public void say() {
System.out.println("Meow!");
lastMeowDate = new Date();
}
}
Слайд 56

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

Интерфейс
Конструкция в коде программы, используемая для описания совокупности возможностей, предоставляемых классом

или компонентом.
Слайд 57

Интерфейс автомобиля interface Car { KPP getKPP(); Airbag getAirbag(); void beep(); void runEngine(Engine engine); }

Интерфейс автомобиля
interface Car {
KPP getKPP();
Airbag getAirbag();
void beep();
void runEngine(Engine engine);
}

Слайд 58

Реализация интерфейса Бумер class BMW implements Car { public KPP getKPP()

Реализация интерфейса

Бумер

class BMW implements Car {
public KPP getKPP() {
return

new AutoKPP;
}
public Airbag getAirbag() {
return new VerySafeAirbag();
}
}

Лада Седан Баклажан

class LADA implements Car {
public KPP getKPP() {
return new ManualKPP;
}
public Airbag getAirbag() {
return null;
}
}

Слайд 59

Правило наследования Java Класс-наследник может наследовать только один базовый класс, но множество интерфейсов.

Правило наследования Java
Класс-наследник может наследовать только один базовый класс, но множество

интерфейсов.
Слайд 60

Абстракция женщины-кошки

Абстракция женщины-кошки

Слайд 61

Что должна уметь женщина-кошка? Интерфейс женщины interface Woman { void seduce

Что должна уметь женщина-кошка?

Интерфейс женщины

interface Woman {
void seduce ();
void beBeautiful();
}

Интерфейс

супергероя

interface SuperHero {
Costume getCostume();
SuperPower getSuperPower();
}

Слайд 62

Реализуем женщину-кошку class CatWoman extends Cat implements Woman, SuperHero { void

Реализуем женщину-кошку
class CatWoman extends Cat implements Woman, SuperHero {
void seduce ()

{…}
void beBeautiful() {…}
Costume getCostume() {…}
SuperPower getSuperPower() {…}
}
Слайд 63

UML-диаграмма женщины-кошки Woman SuperHero Cat Pet CatWoman

UML-диаграмма женщины-кошки

Woman

SuperHero

Cat

Pet

CatWoman

Слайд 64

Задача 5 Реализовать интерфейс стека, работающего с символами: interface IStackChar {

Задача 5

Реализовать интерфейс стека, работающего с символами:
interface IStackChar {
void push(char ch);
char

pop();
boolean isEmpty();
}
Реализованный класс назвать StackChar. Создать класс StackCharTest для теста класса StackChar.
Слайд 65

Задача 6 Создать класс DequeChar, унаследованный от класса StackChar. Добавить в

Задача 6

Создать класс DequeChar, унаследованный от класса StackChar. Добавить в него

операции pushToHead и popFromHead. Создать класс DequeCharTest для теста класса DequeChar.
Слайд 66

Исключения Java try { Код, который может бросать исключения } catch

Исключения Java

try {
Код, который может бросать исключения
} catch (Exception e)

{
Обработка перехваченного исключения
} final {
Блок выполняется либо после try,
либо после catch
}
Слайд 67

Исключения Java int a = 5; int b = 0; try

Исключения Java

int a = 5;
int b = 0;
try {
float c

= a / b;
} catch (ArithmeticException e) {
System.out.println("Делить на ноль нельзя!");
}
Слайд 68

Исключения Java Object Throwable (Checked) Error (Unchecked) Exception (Checked) RuntimeException (Unchecked)

Исключения Java

Object

Throwable (Checked)

Error (Unchecked)

Exception (Checked)

RuntimeException (Unchecked)

Слайд 69

Домашнее задание Создать приложение с классом и тестом этого класса. Использовать

Домашнее задание

Создать приложение с классом и тестом этого класса. Использовать Java

Code Convention.
В каждом варианте требуется сделать:
Класс X
Класс Xtest
Класс Xtest содержит ТОЛЬКО метод main() в котором создается 2-3 объекта типа X. И по очереди вызываются ВСЕ методы класса X с выводом результатов в консоль.
Класс X содержит конструктор с параметрами, и конструктор по умолчанию (без параметров). Также X содержит методы, подразумеваемые Вашим вариантом.