Как вы называете класс, который не имеет базового класса (игнорирующий объект) и не является подклассом?

Я работаю над некоторым кодом, который должен различать 3 сценария пользовательских классов:

  1. класс, от которого происходят другие классы; базовый класс
  2. класс, производный от другого определяемого пользователем класса; унаследованный класс или подкласс
  3. класс, который не наследуется (игнорируя, что все классы наследуют от object, который НЕ определяется пользователем) и не является базовым классом любого другого класса.

Как правильно обратиться к №3?


person SFun28    schedule 15.11.2019    source источник
comment
Это потому, что для класса запрещено наследование, или потому, что никто еще не удосужился наследоваться от него?   -  person GSerg    schedule 15.11.2019
comment
Будет ли № 3 sealed для предотвращения наследования?   -  person Martin    schedule 15.11.2019
comment
@GSerg - это строго не запрещено, но наследовать от него никогда не имеет смысла.   -  person SFun28    schedule 15.11.2019
comment
@Martin - Судя по моему комментарию выше, он, вероятно, должен быть запечатан, хотя я не привык запечатывать свои типы и использовать запечатанный для ссылки на него кажется неправильным, но на самом деле это может быть лучший термин?   -  person SFun28    schedule 15.11.2019
comment
1 - Суперкласс. 2- Детский класс. 3- На самом деле для этого нет стандартного имени, потому что любой класс может быть родительским классом. В C# это был бы запечатанный класс. В Java вы бы назвали это окончательным классом. Но это особенности языка, на самом деле не существует стандартного имени для классов, от которых нельзя наследоваться. Помимо ключевых слов в некоторых языках, в классе без производных нет ничего особенного.   -  person DetectivePikachu    schedule 15.11.2019
comment
@ Мартин прав. Это будет класс sealed (в C#). У этого сценария нет формального названия, но я думаю, вы могли бы назвать его «не подклассом».   -  person Matthew Alltop    schedule 15.11.2019
comment
@DetectivePikachu sealed не означает, что сам класс не может наследоваться от других классов, что также является требованием.   -  person GSerg    schedule 15.11.2019
comment
Я никогда не слышал о термине для такого класса в C #, может быть, стоит посмотреть на другие языки? Или вы можете придумать свой собственный (если вы пишете книгу или документацию). Или просто назовите его class. Кстати, вам не нужно всегда называть базовый класс базовым классом. Это имеет значение только в контексте. Вы хотите ограничить наследование от? Используйте sealed. Вы хотите упомянуть, что у него нет родителей? Вероятно, говорят, что не унаследовано или унаследовано от объекта.   -  person Sinatr    schedule 15.11.2019
comment
Похоже, здесь все согласны с тем, что для № 3 нет подходящего термина. В коде я мог бы описать, как класс участвует в иерархии. Например, создать перечисление HierarchyKind со значениями HierarchyKind.None, HierarchyKind.BaseClass, HierarchyKind.InheritedClass.   -  person SFun28    schedule 15.11.2019
comment
Я согласен с тем, что мне не известен содержательный термин для проведения этого различия. Я хотел бы предупредить вас, что вы попадаете в очень распространенную среди программистов на C#/Java/C++ ловушку смешения деривации и наследования. То, что все эти языки используют деривацию в качестве механизма наследования, не означает, что наследование является деривацией или деривация является наследованием; есть языки, в которых происхождение и наследование ортогональны. Помните, деривация — это своего рода отношение, а наследование — это наличие членов отношения; логически они не являются одним и тем же отношением.   -  person Eric Lippert    schedule 15.11.2019
comment
@EricLippert - Справедливое замечание! Я должен был упомянуть, что конкретная проблема, над которой я работаю, находится в проекте C#/.NET, но я ценю напоминание о том, что не следует путать деривацию с наследованием. Благодарю вас!   -  person SFun28    schedule 15.11.2019
comment
Термин struct приходит на ум при чтении описания #3 :) В остальном я согласен с @Sinatr просто назовите это классом   -  person dpant    schedule 15.11.2019
comment
Я думаю, что концептуально это было бы похоже на сироту, класс без родителей... По сути, это то, чем является POCO.   -  person wlscaudill    schedule 15.11.2019
comment
Это не запрещено строго, но никогда не имеет смысла наследовать от него. - Что ж, если наследоваться от него никогда не имеет смысла, вы можете строго запретить это, добавив ключевое слово запечатанного в объявление класса. В любом случае, я согласен с тем, кто написал это первым — просто назовите это классом.   -  person Zohar Peled    schedule 17.11.2019
comment
@EricLippert Я впервые столкнулся с этим конкретным объяснением наследования (есть член) - не могли бы вы немного рассказать об этом?   -  person Zohar Peled    schedule 17.11.2019
comment
@ZoharPeled: я не уверен, что можно расширить; это в значительной степени это. Спецификация C# определяет наследование как когда тип наследуется от базового класса, все члены базового класса, кроме конструкторов экземпляров, деструкторов и статических конструкторов, становятся членами производного типа. Другими словами, наследование есть члены отношения. Так быть не должно; Разработчики C# решили тесно привязать наследование к наследованию.   -  person Eric Lippert    schedule 17.11.2019
comment
@ZoharPeled: Общее обсуждение языков, в которых проводится более сильное различие между подтипами, подклассами, преобразованием и наследованием, потребует большего, чем комментарий. Хорошим языком для изучения в этом отношении является OCAML, который позволяет создавать подтипы без создания подклассов и создавать подклассы без создания подтипов. Различные виды полиморфизма в OCAML очень интересны.   -  person Eric Lippert    schedule 17.11.2019
comment
@EricLippert да, но возвращаясь на секунду к основам - class Animal {}, class Mammal : Animal {} и class Dog : Mammal {} - класс Dog наследует класс Mammal, который, в свою очередь, наследует класс Animal - вы можете сказать, что собака - это вид млекопитающего, а млекопитающее - вид животного, и вы также можете сказать, что из-за этого у собаки есть члены млекопитающего, у которого есть члены животного — я не вижу здесь разделения — но опять же, возможно, это просто потому, что я я работал только с .Net (и давным-давно с Java)...   -  person Zohar Peled    schedule 17.11.2019
comment
@EricLippert Я посмотрю на OCAML, когда у меня будет шанс, спасибо!   -  person Zohar Peled    schedule 17.11.2019
comment
@ZoharPeled: Действительно, вы думаете об этом как об основах, потому что это мир, в который вы были погружены; давно принятые решения тех разработчиков языков кажутся основополагающими принципами, хотя на самом деле они являются выбором. Теперь представьте себе систему типов, в которой мы говорим, что тип, объединяющий всех собак, кошек и рыб, называется типом домашних животных. При таком определении тип, состоящий из всех собак, является подтипом типа pet, но мы, конечно же, не можем сказать, что он происходит от этого типа или что он наследует методы типа pet.   -  person Eric Lippert    schedule 17.11.2019
comment
@EricLippert Спасибо! Теперь это имеет большой смысл. Я знал, что ты можешь объяснить это :-)   -  person Zohar Peled    schedule 17.11.2019


Ответы (1)


Это неинтегрированный курс.

Вертикальная интеграция — это расширение процесса, означающее новые дополнительные шаги. Это деловое решение, касающееся операций, и вы можете многое узнать из онлайн-статьи McKinsey здесь: https://www.mckinsey.com/business-functions/strategy-and-corporate-finance/our-insights./когда-и-когда-не-в-вертикальную-интеграцию

Когда вы слышите, как деловые люди используют термин «интеграция», он может относиться как к горизонтальной (новые продукты и линейки продуктов), так и к вертикальной.

Википедия использует термин «неинтегрированный» при описании контрольно-измерительных приборов системы управления. Я постоянно поправляю программистов, что это значит "это не шаг в каком-то процессе. Это отдельное устройство, а не вызов функции". И не помогает, когда программисты пытаются выдать себя за специалистов по системам управления, совершенно неправильно употребляя этот термин. Я рад дать вам авторитетный жаргон делового мира.

То, что McKinsey говорит о специфике сайта и интеграции, описано в моей статье на эту тему. Имейте в виду, что мы не во всем согласны. http://www.powersemantics.com/o.html

person RBJ    schedule 01.05.2020