ООП ANDROID CLUB 2015 Сегодня Класс Объект Абстракция Наследование Инкапсуляция Полиморфизм Предупреждение Не старайтесь запомнить Старайтесь понять Что такое ООП? Объектное ориентированное программирование Модель программирование вокруг объектов, а не действий Процедурное программирование ООП Зачем использовать ООП? Легче проектировать – легче понимать Легче исправляются ошибки Легче усовершенствовать Много кратно использование одного кода Два основных кита ООП Класс Объект Класс: пример Объект: пример Класс Шаблон расширяемой программного кода Содержит в себе: Переменные Методы Класс: пример public class Robot { public String name; public String color; public void sayHello(){ System.out.println("Привет!Меня зовут "+name+".Я "+color+" робот"); } } Класс: практика Создавайте класс: Car Создавайте следующие атрибуты для этого класса String: name String: color int: speed И метод drive: Название – XXXXX. Цвет – YYYYY. От Ташкента до Самарканда доеду за Z часов Объект Копия класса Экземпляр основанный на чертеж Объект: пример Robot robot1 = new Robot(); robot1.name = "Андрюха"; robot1.color = "красный"; robot1.sayHello(); Объект: практика Создавайте 3 объекта класса Car 1 – Orlando, белая, 195 2 – Bugatti Veyron, черная, 408 3 – Zaz, красная, 90 И вызывайте метод drive: Название Zaz. Cвет – красная. От Ташкента до Самарканда доеду за 3,43 часов Основные концепты ООП Абстракция Наследование Полиморфизм Инкапсуляция Абстракция: Растение Peashooter Snow Pea Sunflower Абстрактный класс - Plant Абстракция: пример public class Plant { public String name; public int sun_cost; public int rechange_sec; public int thoughness; public void plant() { System.out.println(name+":-"+sun_cost); } } Абстракция: практика Создавайте класс – Zombie Переменные класса Zombie Строка – name Integer – toughness Integer – damage_power Integer – speed Создавайте метод – damage Метод показывает сила урона зомби Наследование: зачем? Предотвращает написать код повторно Наследование: пример public class PeaShooter extends Plant{ public class Sunflower extends Plant{ public PeaShooter() public Sunflower() { { name = "Pea Shooter"; name = "Sunflower"; } } public int sun_generator_power = 25; public void shoot() public void generateSun() { { System.out.println(name+":выстрел"); } } System.out.println("Генерировал "+sun_generator_power+" cолнце"); } } Наследование: практика Создавайте 2 класса наследника – Zombie Regular; name: Regular; speed: 25; метод walk DuckTube; name: Duck Tube; speed: 20, метод swim Полиморфизм: пример @Override public void plant() { try { Thread.sleep(5000); } catch(InterruptedException ex) { Thread.currentThread().interrupt(); } super.plant(); } Полиморфизм: практика Перепишите метод damage для DuckTube зомби Пусть этот зомби подождёт 3 секунду перед тем принести урон Инкапсуляция: не показывать процесс Инкапсуляция: скрывать процесс Инкапсуляция: пример private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } Инкапсуляция: практика Поменяйте тип доступа переменных с public на private внутри класса Zombie, Regular, DuckTube Создавайте методы геттеры и сеттеры Домашнее задание https://www3.ntu.edu.sg/home/ehchua/programming/java/J3f_O OPExercises.html