Как сохранить инварианты для уважения Лискова? - PullRequest
0 голосов
/ 24 февраля 2019

Как вы сохраняете инварианты, чтобы уважать принцип Лискова (один из принципов ТВЕРДЫХ)?Не могли бы вы помочь мне с примером, пожалуйста?Я читал, что класс A и класс B являются инвариантами, если между ними нет взаимосвязи (класс A не является ни подтипом, ни надтипом класса B).Это правда?Я не понимаю, что такое инвариант.

1 Ответ

0 голосов
/ 24 февраля 2019

Инвариант - это то, что содержит (или предполагается, что оно выполняется) все время.

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

Например, если есть класс List<T>со свойством Length типа int и массивом типа T[] во всех методах этого класса можно предположить, что Length всегда меньше или равно длине внутреннего массива.Это инвариант этого класса.Если подкласс List<T> делает так, что Length может (при любых обстоятельствах) быть больше, чем длина массива, то подкласс внесет нарушение этого инварианта.

...