~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 6EC8D8EFD2592B2D3BD7CDDB6497E330__1717866180 ✰
Заголовок документа оригинал.:
✰ Is-a - Wikipedia ✰
Заголовок документа перевод.:
✰ Ис-а — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Is-a ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/6e/30/6ec8d8efd2592b2d3bd7cddb6497e330.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/6e/30/6ec8d8efd2592b2d3bd7cddb6497e330__translat.html ✰
Дата и время сохранения документа:
✰ 22.06.2024 22:15:25 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 8 June 2024, at 20:03 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Ис-а — Википедия Jump to content

Это

Из Википедии, бесплатной энциклопедии

В компонентах представления знаний и онтологии , в том числе для объектно-ориентированного программирования и проектирования , is-a (также пишется как is_a или is a ) является субсумптивным. [а] отношения между абстракциями (например, типами , классами ), где один класс A является подклассом другого класса B (и, следовательно, является суперклассом A ) B . Другими словами, тип A является подтипом типа B, когда спецификация A подразумевает спецификацию B. То есть любой объект (или класс), удовлетворяющий спецификации A, также удовлетворяет спецификации B, поскольку спецификация B более слабая. [1]

Например, кошка «является» животным, но не наоборот. Все кошки — животные, но не все животные — кошки. Поведение, подходящее для всех животных, определяется в классе животных, тогда как поведение, подходящее только для кошек, определяется в классе кошек. Определив класс кошек как «расширение» класса животных, все кошки «наследуют» поведение, определенное для животных, без необходимости явно кодировать это поведение для кошек.

Связанные понятия [ править ]

Отношения is-a следует противопоставлять отношениям has-a ( has_a или has a ) между типами (классами); Путаница отношений has-a и is-a является распространенной ошибкой при разработке модели (например, компьютерной программы ) реальных отношений между объектом и его подчиненным. Отношения is-a также можно противопоставить отношениям экземпляра между объектами (экземплярами) и типами (классами): см. Различие типа и токена .

Подводя итоги отношений, можно выделить:

  • гипероним гипоним (супертип/суперкласс–подтип/подкласс) отношения между типами (классами), определяющие таксономическую иерархию, где
    • для отношения включения : гипоним (подтип, подкласс) имеет отношение типа ( is-a ) со своим гиперонимом (супертипом, суперклассом);
  • холоним мероним (целое/сущность/контейнер-часть/составляющая/член) отношения между типами (классами), определяющие притяжательную иерархию, где
  • отношения понятие-объект (тип-токен) между типами (классами) и объектами (экземплярами), где

Примеры подтипов [ править ]

Подтипирование позволяет заменить данный тип другим типом или абстракцией. Говорят, что подтипирование устанавливает связь между подтипом и некоторой существующей абстракцией, явно или неявно, в зависимости от языковой поддержки. Отношения могут быть выражены явно через наследование в языках, которые поддерживают наследование как механизм подтипирования.

С++ [ править ]

Следующий код C++ устанавливает явные отношения наследования между классами B и A , где B является одновременно подклассом и подтипом A и может использоваться как A везде, где указан B (через ссылку, указатель или сам объект). ).

класс   A 
 {   общественный  : 
    недействительный   DoSomethingALike  ()   const   {} 
 }; 

  класс   B   :   общественный   A 
 {   общественный  : 
    недействительный   DoSomethingBLike  ()   const   {} 
 }; 

  void   UseAnA  (  A   const  &   some_A  ) 
 { 
    some_A  .   СделатьЧто-нибудьAlike  (); 
  } 

 void   SomeFunc  () 
 { 
    B   b  ; 
     УсеАнА  (  б  );    // b можно заменить на A. 
 } 

[3]

Питон [ править ]

Следующий код Python устанавливает явные отношения наследования между классами B и A , где B является одновременно подклассом и подтипом A и может использоваться как A везде, где B. требуется

класс   A  : 
     защита   do_something_a_like  (  self  ): 
         передать 

 класс   B  (  A  ): 
     защита   do_something_b_like  (  self  ): 
         передать 

 защиту   use_an_a  (  some_a  ): 
     some_a  .   do_something_a_like  () 

 def   some_func  (): 
     b   =   B  () 
     use_an_a  (  b  )    # b можно заменить на A. 

В следующем примере type(a) — это «обычный» тип, а type(type(a)) — метатип. Хотя при распространении все типы имеют один и тот же метатип ( PyType_Type , который также является собственным метатипом), это не является обязательным требованием. Тип классических классов, известный какtypes.ClassType , также можно считать отдельным метатипом. [4]

>>>  a   =   0 
 >>>  тип  (  a  ) 
 <тип 'int'> 
 >>>  тип  (  тип  (  a  )) 
 <тип 'тип'> 
 >>>  тип  (  тип  (  тип  (  a  ))) 
 <тип 'тип'> 
 >>>  тип  (  тип  (  тип  (  тип  (  a  )))) 
 <тип 'тип'> 

Ява [ править ]

В Java is- отношение между параметрами типа одного класса или интерфейса и параметрами типа другого определяется предложениями расширения и реализации .

Используя Collections занятия, ArrayList<E> реализует List<E>, и List<E> простирается Collection<E>. Так ArrayList<String> является подтипом List<String>, который является подтипом Collection<String>. Отношения подтипов сохраняются между типами автоматически. При определении интерфейса PayloadList, который связывает необязательное значение универсального типа P с каждым элементом, его объявление может выглядеть так:

интерфейс   PayloadList  <  E  ,   P  >   расширяет   список  <E>  {   ; 
     void   setPayload  (  int   index  ,   P   val  ) 
      ... 
 } 

Следующие параметризации PayloadList являются подтипами List<String>:

PayloadList  <  String  ,   String  > 
 PayloadList  <  String  ,   Integer  > 
 PayloadList  <  String  ,   Exception  > 

Принцип замены Лискова [ править ]

Принцип замены Лискова объясняет следующее свойство: «Если для каждого объекта o1 типа S существует объект o2 типа T такой, что для всех программ P, определенных в терминах T, поведение P не меняется, когда o1 заменяется на o2, тогда S является подтипом T», . [5] Следующий пример показывает нарушение LSP.

Вот, пожалуй, пример нарушения LSP:

класс   Rectangle 
 { 
   public  : 
     void     SetWidth  (  double   w  )    {   itsWidth   =   w  ;    } 
     void     SetHeight  (  двойной   час  )   {   itsHeight   =   час  ;    } 
     Double   GetHeight  ()   const     {   return   itsHeight  ;    } 
     Double   GetWidth  ()   const      {   return   itsWidth  ;    } 
     Double   GetArea  ()   const       {   return   GetHeight  ()   *   GetWidth  ();    } 
   Частное  : 
     удвоить   свою ширину  ; 
      удвоить   его высоту  ; 
  }; 

С точки зрения программирования класс Square может быть реализован путем наследования класса Rectangle.

общественный   класс   Square   :   Rectangle 
 { 
   public  : 
     virtual   void   SetWidth  (  double   w  ); 
      виртуальная   пустота   SetHeight  (  double   h  ); 
  }; 
  void   Square::SetWidth  (  double   w  ) 
 { 
     Rectangle  ::  SetWidth  (  w  ); 
      Прямоугольник  ::  SetHeight  (  w  ); 
  } 
 void   Square::SetHeight  (  double   h  ) 
 { 
     Rectangle  ::  SetHeight  (  h  ); 
      Прямоугольник  ::  SetWidth  (  h  ); 
  } 

Однако это нарушает LSP, хотя is-a. между Rectangle и Square сохраняется отношение

Рассмотрим следующий пример, где функция g не работает, если ей передан квадрат, и поэтому принцип открытости-закрытости можно считать нарушенным.

пустота   г  (  Прямоугольник  &   р  ) 
 { 
   р  .   SetWidth  (  5  ); 
    р  .   УстановитьВысоту  (  4  ); 
    утверждать  (  r  .  GetArea  ())   ==   20  );    // утверждение не удастся 
 } 

И наоборот, если учесть, что тип фигуры должен ограничивать только соотношение ее размеров, то предположение в g() о том, что SetHeight будет изменять высоту и площадь, но не ширину, является недопустимым, а не только для настоящих квадратов, но даже потенциально для других прямоугольников, которые могут быть закодированы так, чтобы сохранять площадь или соотношение сторон при изменении высоты.

[6]

См. также [ править ]

Примечания [ править ]

  1. ^ «Подтипы и подклассы» (PDF) . MIT OCW . Проверено 2 октября 2012 г.
  2. ^ См. также «Сдерживание» (компьютерное программирование) .
  3. ^ Митчелл, Джон (2002). «10 «Концепции объектно-ориентированных языков» ». Понятия в языке программирования . Кембридж, Великобритания: Издательство Кембриджского университета. п. 287. ИСБН  0-521-78098-5 .
  4. ^ Гвидо ван Россум. «Подтипирование встроенных типов» . Проверено 2 октября 2012 г.
  5. ^ Лисков, Барбара (май 1988 г.). Абстракция данных и иерархия (PDF) . Уведомления SIGPLAN. Архивировано из оригинала 21 июня 2020 г. {{cite book}}: CS1 maint: неподходящий URL ( ссылка )
  6. ^ «Принцип замены Лискова» (PDF) . Роберт К. Мартин, 1996. Архивировано из оригинала (PDF) 5 сентября 2015 года . Проверено 2 октября 2012 г.

Ссылки [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 6EC8D8EFD2592B2D3BD7CDDB6497E330__1717866180
URL1:https://en.wikipedia.org/wiki/Is-a
Заголовок, (Title) документа по адресу, URL1:
Is-a - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)