1.50M
Категория: ПрограммированиеПрограммирование

3 лабораторная. Часть 2: «Кодим»

1.

ВКУСНЯХА 3 лабы.
Часть 2: «Кодим»
Инфохимия, 1 курс, зима…

2.

А что от нас хотят?

3.

Воть этё…

4.

PLAN УРОКА
al
HELP
РУБРИКА «ПО ЖЕЛАНИЮ АУДИТОРИИ»
STUPID
SOLID
Class Object
Перегрузка методов
КВТД или «Коварианты возвращаемых
типов данных»

5.

Как будто бы help

6.

Аннотации
interface doctor_role{
public void heal(){}
}
interface doctor_role{
public void heal(){}
}
class Petya implements doctor_role{
@Override
public void heal(){
System.out.println(“Petya heals someone”);
}
}
class Petya implements doctor_role{
@Override
public void heal(String what){
System.out.println(“Petya heals someone” + what);
}
}
class Petya implements doctor_role{
public void heal(){
System.out.println(“Petya heals someone”);
}
}
class Petya implements doctor_role{
public void heal(String what){
System.out.println(“Petya heals someone”);
}
public void heal(){
System.out.println(“Petya heals someone”);
}
}
ОШИБКА

7.

Static and non-static
Создаём класс с полями и методами:
class Machine{
static int static_test = 0;
int nonstatic_test = 0;
public static void PUF(){System.out.println(“PUF”);}
public void GAF(){
System.out.println(“GAF”);
}
}
Используем переменные:
Machine.static_int = 10; - OK
Machine.nonstatic_int = 10; - ERROR
OK:
Machine mach = new Machine();
mach.nonstatic_int = 10;
Используем методы:
Machine.PUF(); - OK
Machine.GAF(); - ERROR
OK:
Machine mach = new Machine();
mach.GAF();

8.

Как как будто бы удовлетворить
Мартина?
abstract class Human{
private int health, age;
private String name;
public String getName(){
return name;
}
public setName(String name){
this.name = name;
}
*Others getters/setters*
Public void HaveAHit(){}
}
class Valera extends Human{
health = 10;
age = 12
public void HaveAHit(){
health--;
System.out.println(“Valera was hearted”);
}
}

9.

S - Singleton
public class Singleton{
private static final Singleton INSTANCE = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return INSTANCE;
}
}

10.

T – Tight Coupling
(Сильная связность)

11.

U – Untestability
(невозможность тестить)

12.

P – Premature Optimization
(преждевременная оптимизация)

13.

I – Indescriptive Naming
(не дескриптивный нейминг)

14.

D - Duplication
Не воруй, не
повторяйся и
не пиши
много букаф!

15.

S - Single Responsibility Principle
(единственная обязанность)
public class OrderProcessor{
public void process(Order order){
if (order.isValid()) && save(order)
sendConfirmationEmail(order);
}
private boolean save(Order order){
MySqlConnection connection = new MySqlConnection(“database.url”);
//сохранение заказа в базу данных
return true;
}
private void sendConfirmationEmail(Order order){
String name = order.getCustomerName();
String email = order.getCustomerEmail();
//and other actions…
}
}

16.

А вот так вот надо:

17.

O – Open-Close Principle
(открытость-закрытость)

18.

L- Liskov Substitution Principle
(Подстановка Барбары Лисков)
объекты в программе можно заменить их наследниками без изменения свойств программы
class Items{}
class Doors extends Items{}
public void See(Items what){
System.out.println("*" + this.name + " see " + what.name + "*" );
}
public void See(Doors what){
System.out.println("*" + this.name + " see " + what.name + "*" );
}

19.

I- Interface Segregation Principle
interface tools{
public void hit(){}
public void nag(){}
}
interface hummer_actions{
public void hit(){}
}
interface saw_actions{
public void nag(){}
}
НЕБРО
class hummer implements tools{
public void hit(){*some words*}
public void nag(){*some words*}
}
class saw implements tools{
public void hit(){*some words*}
public void nag(){*some words*}
}
БРО
class hummer implements hummer_actions{
public void hit(){*some words*}
}
class saw implements saw_actions{
public void nag(){*some words*}
}

20.

D – Dependency Iversion Principle
(инверсия зависимостей)
class AngryCar{
int level_of_angry = 0;
private Gun gun;
public void attack(Gun gun){
if(this.level_of_angry == 10)
gun.fire();
}
}
PLOXO
class Gun{
public void Fire(){
System.out.println(“FIREEEEEE”);
}
}

21.

А как тогда надо?
class AngryCar{
int level_of_angry = 0;
private Gun gun;
public void attack(Gun gun){
if(this.level_of_angry == 10)
gun.Fire();
}
}
interface Gun_actions{
public void Fire(){}
}
class Gun implements Gun_actions{
public void Fire(){
System.out.println(“FIREEEEEE”);
}
}

22.

Class Object
• Класс классов.
• Есть свои методы.

23.

toString()

24.

equals()

25.

hashCode()

26.

Как это выглядит в сумме?

27.

ВАЖНО
• У двух РАЗНЫХ объектов может быть ОДИНАКОВЫЙ
хэш-код (разные люди могут жить в одной общаге).
• У ОДИНАКОВЫХ объектов (по мнению equals)
должен быть ОДИНАКОВЫЙ хэш-код.
• Хэш-коды должны быть выбраны таким образом,
чтобы не было большого количества различных
объектов с одинаковыми хэш-кодами (пришёл в
общагу, а там весь уник поселился)
• Переопределяешь equals() – переопределяй и
hashCode()

28.

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

29.

Коварианты возвращаемых типов
данных

30.

Имеем…

31.

СПАСИБО ЗА ВНИМАНИЕ!!!
Всех жду во вторник на разбор вопросов и сложной темы
English     Русский Правила