Liskov substitution principle
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

n Принцип подстановки Барбары Лисковой

l Пусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) должно быть верным для объектов y типа S, где S является подтипом типа T

l (Р.С. Мартин) Использующие базовый тип функции должны иметь возможность использовать подтипы базового типа не зная об этом

l (Б. Мейер) Дочерний класс не должен нарушать контракт родительского класса

n Требования к сигнатурам операций дочерних классов

l Типы аргументов не должны быть уже

l Типы возвращаемых значений не должны быть шире

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

l Область доступа операции не должна сужаться

ТАК МОЖНО

public class Rectangle{

double height, width;

// методы set и get

}

 

public class MyClass {

public static Rectangle zoomRectangle(Rectangle rect,

                                 double   zoomHeight, double zoomWidth) {

   rect.setHeight(rect.getHeight() * zoomHeight);

   rect.setWidth(rect.getWidth() * zoomWidth);

   return rect;

}

public static void main(String[] args) {

   Rectangle r1 = new Rectangle();

   r1.setHeight(5);

   r1.setWidth(2);

   zoomRectangle(r1, 1, 2);

   System.out.println("Area: " + r1.getHeight() * r1.getWidth());

}

}

 

ТАК НЕЛЬЗЯ!

public class Square extends Rectangle{

public void setHeight(double h) {height = width = h;}

public void setWidth(double w) {height = width = w;}

}

 

public class MyClass {

public static Rectangle zoomRectangle(Rectangle rect,

                                 double   zoomHeight, double zoomWidth) {

   rect.setHeight(rect.getHeight() * zoomHeight);

   rect.setWidth(rect.getWidth() * zoomWidth);

   return rect;

}

public static void main(String[] args) {

   Rectangle r1 = new Square();

   r1.setHeight(5);

   r1.setWidth(2);

   zoomRectangle(r1, 1, 2);

   System.out.println("Area: " + r1.getHeight() * r1.getWidth());

}

}

 

Вопрос 32 Закон Деметры, принципы KISS и YAGNI. 40-42 Отношения между типами и особенности разработки

 

Law of Demeter

n Закон Деметры (принцип наименьшего знания)

l Каждый модуль должен обладать ограниченным знанием о других модулях: должен знать только о модулях, которые имеют к нему непосредственное отношение

l Каждый модуль должен взаимодействовать только с известными ему модулями и не должен «разговаривать с незнакомыми»

l Каждый модуль должен обращаться только к своим непосредственным друзьям

n Объект A может вызвать сервис (метод) объекта B, но не может использовать объект B для получения доступа к объекту C, чтобы использовать его методы

n Метод m() объекта O может вызывать только
методы следующих объектов

l Сам объект O

l Объекты-параметры метода m()

l Любые объекты, созданные в ходе выполнения m()

l Объектов, непосредственно ассоциированных с O

l Глобальные переменные, доступные O в контексте m()

 


Принцип YAGNI

n You ain’t gonna need it

l Реализуйте что-то, только  если оно вам действительно нужно

l Не реализуйте что-то, использование чего вытолько предвидите

n Требуется разумный баланс со здравым смыслом

 

Принцип KISS

n Keep it simple, stupid

l Keep it simple and stupid

l Keep it short and simple

n Простота должна быть одной из основных целей в ходе разработки

n Следует уходить от необоснованных сложностей

 

 

Вопрос 33 Понятие исключения, причины возникновения, механизм обработки. 2-8 Классификация исключений. Лекция Исключительные ситуации и их обработка

 

Э… Проблемы

n В процессе выполнения программные приложения встречаются с ситуациями, приводящими к возникновению ошибок

l Ошибки бывают различной степени тяжести

l Ошибки необходимо каким-либо
способом учитывать
и обрабатывать

n Ошибки возникают в случае:

l некорректного ввода данных

l сбоев оборудования

l нарушения ограничений среды

l выполнения программного кода

 



Обработка ошибок

n Обеспечение стабильности и надежности работы программы

n Дружественное поведение конечного программного продукта

n Безопасность в процессе выполнения

n Удобство при написании программного кода (ПРОТИВОРЕЧИЕ)

 

Подходы к обработке ошибок

n Возвращение методом кода ошибки

l Возвращается только код ошибки

int errNum = firstMethod();

if (errNum == -1) {

// обработка 1- ой ошибки

}

else if(errNum == -2) {

// обработка 2- ой ошибки

}

 

n Используются «свободные» значения возвращаемого типа

if (( ans = sqrt ( val )) < 0) {

// Обработка ошибки

}

else {

// Продолжение вычислений

}

 

n Встроенный в язык механизм проверки и обработки

try {

someBusinessLogic();

...

anotherBusinessLogic()

}

catch(Exception1 e1) {

// обработка 1- ой ошибки

}

...

catch(ExceptionN eN) {

// обработка N- ой ошибки

}

finally {

// выполнение завершающих

// работу действий

}

 

Механизм обработки

 

n Создается и «выбрасывается» объект исключения, содержащий информацию об ошибке

n Выполнение текущего потока вычислений приостанавливается

n Завершается выполнение блоков и методов в цепочке вызовов, пока не будет найден код, отлавливающий исключение

n Выполнение потока вычислений возобновляется, причем выполняется код обработчика исключения

 

Дата: 2019-07-30, просмотров: 224.