Класс в объектно ориентированном программировании это

В объектно-ориентированном программировании, а класс — это расширяемая программа-код-шаблон для создания объектов, обеспечивающих начальные значения для государства (переменные-члены) и реализации поведения (функции-члены или методы).[2] во многих языках. Класс имя используется в качестве имени класса (шаблон). Имя по умолчанию конструктор класса (это подпрограмма , которая создает объекты). А как тип объектов. Создаваемых путем создания экземпляра класса; эти понятия легко сливаются.[2] Хотя, с точки зрения слияния. Можно было бы утверждать. Что это особенность. Присущая языку из-за его полиморфной природы и почему эти языки настолько мощны. Динамичны и адаптируемы для использования по сравнению с языками без полиморфизма.

Таким образом. Они могут легче моделировать динамические системы (т. Е. реальный мир. Машинное обучение, ИИ).

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

В некоторых языках классы являются только функцией времени компиляции (новые классы не могут быть объявлены во время выполнения). В то время как в других языках классы являются

гражданами первого классаи, как правило . Сами являются объектами (обычно типа Класс или что-то подобное). В этих языках класс. Создающий классы. Называется метаклассом.

Класс против типа

В повседневном использовании люди часто ссылаются на тип: интерфейс. А именно типы переменных-членов. Сигнатуры функций-членов (методов) и свойства. Которым они удовлетворяют. В то же время класс имеет реализацию (в частности. Реализацию методов) и может создавать объекты заданного типа с заданной реализацией. В терминах теории типов класс—это реализация—

конкретная структура данных и набор подпрограмм. — в то время как тип-это интерфейс. Различные (конкретные) классы могут производить объекты одного и того же (абстрактного) типа (в зависимости от системы типов); например. Тип Стек может быть реализован с двумя классами – SmallStack (быстрый для небольших стопок. Но плохо масштабируется) и ScalableStack (хорошо масштабируется. Но высокие накладные расходы для небольших стеков). Аналогично, данный класс может иметь несколько различных конструкторов.

Типы классов обычно представляют собой существительные, такие как человек, место или вещь, или что-то

номинированное, а класс представляет их реализацию. Например, а Тип банана может представлять свойства и функциональность бананов в целом. В то время как ABCBanana и Классы XYZBanana будут представлять способы производства бананов (скажем. Поставщики бананов или структуры данных и функции для представления и рисования бананов в видеоигре). То Класс ABCBanana может затем производить определенные бананы: экземпляры Класс ABCBanana будет представлять собой объекты типа Банан. Часто дается только одна реализация типа. И в этом случае имя класса часто совпадает с именем типа.

Проектирование и реализация

Классы состоят из структурных и поведенческих составляющих. Языки программирования. Включающие классы в качестве конструкта программирования. Предлагают поддержку различных функций. Связанных с классами. И синтаксис. Необходимый для использования этих функций. Сильно варьируется от одного языка программирования к другому.

Структура

Нотация UML для классов

Класс содержит описания полей данных (или свойства, поля, элементыданных или атрибуты). Обычно это типы полей и имена. Которые будут связаны с переменными состояния во время выполнения программы; эти переменные состояния либо принадлежат классу. Либо конкретным экземплярам класса.

В большинстве языков структура. Определенная классом. Определяет расположение памяти. Используемой его экземплярами. Возможны и другие реализации: например. Объекты в Python используют ассоциативные контейнеры ключ-значение.]

Некоторые языки программирования. Такие как Eiffel. Поддерживают спецификацию инвариантов как часть определения класса и применяют их через систему типов. Инкапсуляция состояния необходима для того. Чтобы иметь возможность принудительно применять инварианты класса.

Поведение

Поведение класса или его экземпляров определяется с помощью методов. Методы-это подпрограммы с возможностью работы с объектами или классами. Эти операции могут изменять состояние объекта или просто предоставлять способы доступа к нему. Существует много видов методов. Но поддержка их варьируется в разных языках. Некоторые типы методов создаются и вызываются программистским кодом. В то время как другие специальные методы—такие как конструкторы. Деструкторы и операторы преобразования—создаются и вызываются сгенерированным компилятором кодом. Язык также может позволить программисту определить и вызвать эти специальные методы.[7][8]

Концепция интерфейса класса

Каждый класс реализует (или реализует) интерфейс. Предоставляя структуру и поведение. Структура состоит из данных и состояния. А поведение-из кода. Который определяет. Как реализуются методы. Существует различие между определением интерфейса и реализацией этого интерфейса; однако во многих языках программирования эта грань размыта. Поскольку объявления классов одновременно определяют и реализуют интерфейс. Однако некоторые языки предоставляют функции. Которые разделяют интерфейс и реализацию. Например, абстрактный класс может определять интерфейс без предоставления реализации.

Языки, поддерживающие наследование классов. Также позволяют классам наследовать интерфейсы от классов. Из которых они являются производными.

Например, если

В языках , поддерживающих спецификаторы доступа, интерфейс класса рассматривается как набор открытых членов класса. Включая как методы. Так и атрибуты (через неявные методы getter и setter); любые закрытые члены или внутренние структуры данных не предназначены для зависимости от внешнего кода и. Таким образом. Не являются частью интерфейса.

Методология объектно-ориентированного программирования диктует. Что операции любого интерфейса класса должны быть независимы друг от друга. Это приводит к многоуровневому дизайну. Где клиенты интерфейса используют методы. Объявленные в интерфейсе. Интерфейс не требует. Чтобы клиенты вызывали операции одного интерфейса в каком-либо определенном порядке. Этот подход имеет то преимущество. Что клиентский код может предполагать. Что операции интерфейса доступны для использования всякий раз. Когда клиент имеет доступ к объекту.]

Пример

Кнопки на передней панели телевизора — это интерфейс между вами и электрической проводкой на другой стороне его пластикового корпуса. Вы нажимаете кнопку В этом примере ваш конкретный телевизор является экземпляром. Каждый метод представлен кнопкой. И все кнопки вместе составляют интерфейс (другие телевизоры. Которые являются той же моделью, что и ваш. Будут иметь тот же интерфейс). В своей наиболее распространенной форме интерфейс представляет собой спецификацию группы связанных методов без какой-либо связанной реализации этих методов.

Телевизор также имеет множество атрибутов, таких как размер и поддерживает ли он цвет. Которые вместе составляют его структуру. Класс представляет собой полное описание телевизора. Включая его атрибуты (структуру) и кнопки (интерфейс).

Получение общего количества произведенных телевизоров может быть статическим методом класса телевизоров. Этот метод явно связан с классом. Но находится вне области каждого отдельного экземпляра класса. Другой пример-статический метод. Который находит конкретный экземпляр из множества всех телевизионных объектов.

Доступность участников

Ниже приведен общий набор спецификаторов доступа:[11]

  • Private (или class-private) ограничивает доступ к самому классу. Только методы. Являющиеся частью одного класса. Могут получить доступ к закрытым членам.
  • Protected (или class-protected) позволяет самому классу и всем его подклассам получить доступ к члену.
  • Public означает. Что любой код может получить доступ к члену по его имени.

Хотя многие объектно-ориентированные языки поддерживают описанные выше спецификаторы доступа. Их семантика может отличаться.

Объектно-ориентированное проектирование использует спецификаторы доступа в сочетании с тщательным проектированием реализаций общедоступных методов для принудительного применения инвариантов классов—ограничений на состояние объектов. Обычно спецификаторы доступа используются для отделения внутренних данных класса от его интерфейса: внутренняя структура становится закрытой. В то время как публичные методы доступа могут использоваться для проверки или изменения таких частных данных.

Спецификаторы доступа не обязательно контролируют видимость, поскольку даже закрытые члены могут быть видны внешнему коду клиента. В некоторых языках недоступный. Но видимый член может быть упомянут во время выполнения (например. Указателем. Возвращаемым из функции-члена). Но попытка использовать его. Ссылаясь на имя члена из клиентского кода. Будет предотвращена проверкой типов.[12]

Различные объектно-ориентированные языки программирования обеспечивают доступность и видимость элементов в различной степени и. В зависимости от системы типов языка и политики компиляции. Применяются либо во время компиляции, либо во времявыполнения . Например, язык Java не позволяет компилировать клиентский код. Который обращается к частным данным класса. [13] В языке C++ частные методы видны. Но недоступны в интерфейсе; однако они могут быть сделаны невидимыми путем явного объявления полностью абстрактных классов. Представляющих интерфейсы класса.]

Некоторые языки имеют другие схемы специальных возможностей:

  • Доступность экземпляра и класса: Ruby поддерживает спецификаторы доступа instance-private и instance-protected вместо class-private и class-protected соответственно. Они отличаются тем. Что ограничивают доступ на основе самого экземпляра. А не класса экземпляра.]
  • Friend: C++ поддерживает механизм. В котором функция. Явно объявленная как функция friend класса. Может получить доступ к членам. Обозначенным как private или protected.[16]
  • Путь на основе: Java поддерживает ограничение доступа к члену в пакете Java, который является логическим путем файла. Тем не менее. Это обычная практика при расширении платформы Java для реализации классов в том же пакете. Что и класс платформы. Чтобы получить доступ к защищенным членам. Исходный файл может существовать в совершенно другом месте и может быть развернут в другой файл .jar. Но все равно находиться в том же логическом пути. Что и JVM.[11]

Межклассовые отношения

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

Композиционный подход

Классы могут быть составлены из других классов. Тем самым устанавливая композиционные отношения между окружающим классом и его вложенными классами. Композиционные отношения между классами также широко известны как отношения has-a. Например. Класс Следовательно. У автомобиля есть Двигатель. Одним из аспектов композиции является сдерживание. Которое представляет собой ограждение экземпляров компонентов экземпляром. У которого они есть. Если заключающий объект содержит экземпляры компонентов по значению. То компоненты и их заключающий объект имеют одинаковое время жизни Если компоненты содержатся по ссылке. Они могут не иметь аналогичного срока службы. Например, в Objective-C 2.0:

@interface Car : NSObject @property NSString *name; @property Engine *engine @property NSArray *tires; @end 

Этот Класс Car имеет экземпляр NSString (строковый объект), Двигатель, и NSArray (объект массива).

Иерархический

Классы могут быть производными от одного или нескольких существующих классов. Тем самым устанавливая иерархическую связь между производными классами (базовыми классами, родительскими классами или суперклассами) и производным классом (дочерним классом или подклассом) . Отношение производного класса к производным классам обычно известно как отношение is-a. Например. Класс Следовательно. Кнопка-это элемент управления. Структурные и поведенческие элементы родительских классов наследуются по детскому классу. Производные классы могут определять дополнительные структурные элементы (поля данных) и поведенческие элементы (методы) в дополнение к тем. Которые они наследуют и, следовательно, являются специализациями их суперклассов. Кроме того, производные классы могут переопределять унаследованные методы. Если это позволяет язык.

Не все языки поддерживают множественное наследование. Например, Java позволяет классу реализовывать несколько интерфейсов. Но наследовать только от одного класса.[20] Если множественное наследование разрешено. Иерархия представляет собой направленный ациклический граф (или DAG для краткости). В противном случае это дерево. Иерархия имеет классы в качестве узлов и отношения наследования в качестве связей. Классы одного и того же уровня чаще ассоциируются, чем классы разных уровней. Уровни этой иерархии называются слоями или уровнями абстракции.

Пример (Упрощенный код Objective-C 2.0, из iPhone SDK):

@interface UIResponder : NSObject //... @interface UIView : UIResponder //... @interface UIScrollView : UIView //... @interface UITableView : UIScrollView //... 

В этом примере UITableViewэто UIScrollView — это UIView-это UIResponder-это NSObject.

Определения подкласса

Концептуально суперкласс-это надмножество его подклассов. Например, общая иерархия классов будет включать GraphicObject как суперкласс Прямоугольник и Эллипс, в то время как Квадрат был бы подклассом Прямоугольник. Все это также отношения подмножеств в теории множеств. То есть все квадраты являются прямоугольниками. Но не все прямоугольники являются квадратами.

Распространенной концептуальной ошибкой является ошибка части отношения с подклассом. Например, автомобиль и грузовик-это оба вида транспортных средств. И было бы уместно смоделировать их как подклассы класса транспортных средств. Однако было бы ошибкой моделировать составные части автомобиля как отношения подклассов. Например, автомобиль состоит из двигателя и кузова. Но было бы нецелесообразно моделировать двигатель или кузов как подкласс автомобиля.

В объектно-ориентированном моделировании эти виды отношений обычно моделируются как свойства объекта. В этом примере Класс автомобилей будет иметь свойство под названием части. части будут типизированы для хранения коллекции объектов. Таких как экземпляры Тело, Двигатель, Шиныи т. д. Языки объектного моделирования. Такие как UML, включают в себя возможности моделирования различных аспектов Эта информация может быть использована инструментами разработчика для генерации дополнительного кода помимо базовых определений данных для объектов. Таких как проверка ошибок в методах get и set.]

Одним из важных вопросов при моделировании и реализации системы классов объектов является вопрос о том. Может ли класс иметь один или несколько суперклассов. В реальном мире с реальными наборами было бы редкостью найти наборы. Которые не пересекались бы с более чем одним другим набором. Однако, в то время как некоторые системы. Такие как Flavors и CLOS. Предоставляют возможность для более чем одного родителя сделать это во время выполнения. Вводит сложность. Которую многие в объектно-ориентированном сообществе считают антитетичной целям использования классов объектов в первую очередь. Понимание того. Какой класс будет отвечать за обработку сообщения. Может стать сложным при работе с несколькими суперклассами. При небрежном использовании эта функция может ввести некоторые из тех же системных сложностей и неоднозначностей. Которые были разработаны. Чтобы избежать.[22]

Большинство современных объектно-ориентированных языков. Таких как Smalltalk и Java. Требуют единого наследования во время выполнения. Для этих языков множественное наследование может быть полезно для моделирования. Но не для реализации.

Однако объекты семантического веб-приложения имеют несколько суперклассов. Изменчивость Интернета требует такого уровня гибкости. И технологические стандарты. Такие как язык веб-онтологии (OWL), предназначены для его поддержки.

Аналогичная проблема заключается в том. Можно ли изменить иерархию классов во время выполнения. Языки, такие как Flavors. CLOS и Smalltalk. Поддерживают эту функцию как часть своих протоколов метаобъектов. Поскольку классы сами являются объектами первого класса. Можно заставить их динамически изменять свою структуру. Отправляя им соответствующие сообщения. Другие языки. Которые больше ориентированы на строгий тип. Такие как Java и C++. Не позволяют изменять иерархию классов во время выполнения. Объекты семантического веба имеют возможность изменять классы во время выполнения. Рациональное аналогично обоснованию разрешения нескольких суперклассов. Что Интернет настолько динамичен и гибок. Что для управления этой волатильностью требуются динамические изменения в иерархии.[23]

Ортогональность концепции класса и наследования

Хотя обычно считается, что языки. Основанные на классах. Поддерживают наследование. Наследование не является неотъемлемым аспектом концепции классов. Некоторые языки. Часто называемые объектно-ориентированными языкамиПримеры объектно-ориентированных языков включают более ранние версии Visual Basic.

В объектно-ориентированный анализ

В объектно-ориентированном анализе и в UMLассоциация между двумя классами представляет собой сотрудничество между классами или их соответствующими экземплярами. Ассоциации имеют направление; например. Двунаправленная ассоциация между двумя классами указывает на то. Что оба класса осознают свои отношения.

Роль ассоциации задается концом ассоциации и описывает роль соответствующего класса. Например, роль Кроме того. Множественность роли ассоциации описывает. Сколько экземпляров соответствует каждому экземпляру другого класса ассоциации. Общие кратности таковы ]

Существует много категорий классов. Некоторые из которых перекрываются.

Абстрактные и конкретные

В языке, поддерживающем наследование , абстрактный классили абстрактный базовый класс (ABC) — это класс. Который не может быть создан. Поскольку он либо помечен как абстрактный. Либо просто определяет абстрактные методы (или виртуальные методы). Абстрактный класс может предоставлять реализации некоторых методов. А также может указывать виртуальные методы с помощью сигнатур, которые должны быть реализованы прямыми или косвенными потомками абстрактного класса. Прежде чем класс. Производный от абстрактного класса. Может быть создан. Все абстрактные методы его родительских классов должны быть реализованы каким-либо классом в цепочке производных.[26]

Большинство объектно-ориентированных языков программирования позволяют программисту указать. Какие классы считаются абстрактными. И не позволяют создавать их экземпляры. Например, в Java, C# и PHPиспользуется ключевое слово abstract.[27][28] В C++абстрактный класс-это класс . Имеющий по крайней мере один абстрактный метод. Заданный соответствующим синтаксисом на этом языке (чистая виртуальная функция на языке C++).]

Класс, состоящий только из виртуальных методов. Называется Чистым абстрактным базовым классом (или Чистым ABC) в C++ и также известен пользователям языка как интерфейс.[14] Другие языки. В частности Java и C#. Поддерживают вариант абстрактных классов. Называемый интерфейсом через ключевое слово в языке. В этих языках множественное наследование не допускается. Но класс может реализовать несколько интерфейсов. Такой класс может содержать только абстрактные общедоступные методы.[20][29][30]

Конкретный класс-это класс . Который может быть создан, в отличие от абстрактных классов. Которые не могут.

Локальное и внутреннее

В некоторых языках классы могут быть объявлены в областях, отличных от глобальной области. Существуют различные типы таких классов.

Внутренний класс-это класс. Определенный внутри другого класса. Отношение между внутренним классом и содержащим его классом также можно рассматривать как другой тип ассоциации классов. Внутренний класс обычно не связан с экземплярами заключающего класса и не создается вместе с его заключающим классом. В зависимости от языка. Может быть или не быть возможным ссылаться на класс из-за пределов заключающего класса. Связанное понятие-это внутренние типы, также известные как внутренний тип данных или вложенный тип, который является обобщением понятия внутренних классов. C++ это пример языка. Который поддерживает как внутренние классы. Так и внутренние типы (через объявления typedef).[31][32]

Другой тип-это локальный класс, который является классом. Определенным в процедуре или функции. Это ограничивает ссылки на имя класса в пределах области. Где объявлен класс. В зависимости от семантических правил языка могут существовать дополнительные ограничения на локальные классы по сравнению с нелокальными. Одним из распространенных ограничений является запрещение локальным методам класса доступа к локальным переменным заключающей функции. Например, в C++ локальный класс может ссылаться на статические переменные, объявленные в его заключающей функции. Но не может получить доступ к автоматическим переменным функции.]

Метаклассы

Метаклассы-это классы. Экземпляры которых являются классами.Метакласс описывает общую структуру набора классов и может реализовывать шаблон проектирования или описывать определенные типы классов. Метаклассы часто используются для описания фреймворков[35]

В некоторых языках. Таких как Python, Ruby или Smalltalk, класс также является объектом; таким образом. Каждый класс является экземпляром уникального метакласса. Встроенного в язык. [5][36] Общая объектная система Lisp (CLOS) предоставляет протоколы metaobject (MOP) для реализации этих классов и метаклассов. [38]

Не поддающийся подклассификации

Неклассические классы позволяют программистам проектировать классы и иерархии классов. Где на некотором уровне иерархии дальнейшая деривация запрещена (автономный класс также может быть обозначен как неклассический. Предотвращая формирование какой-либо иерархии). Сравните это с абстрактными классами. Которые подразумевают. Поощряют и требуют деривации для того. Чтобы быть использованными вообще. Класс, не поддающийся подклассу. Неявно конкретен.

Класс, не являющийся подклассом. Создается путем объявления класса как sealedв C#. Так finalи в Java или PHP.[39][40][41] Например, Stringкласс Java обозначается как final[42].]

Неклассические классы могут позволить компилятору (в скомпилированных языках) выполнять оптимизацию. Недоступную для подклассных классов. [43]

Открытый класс

Открытый класс — это класс. Который можно изменить. Как правило, исполняемая программа не может быть изменена заказчиками. Разработчики часто могут изменять некоторые классы. Но обычно не могут изменять стандартные или встроенные. В Rubyвсе классы открыты. В Pythonклассы могут быть созданы во время выполнения. И все они могут быть изменены впоследствии.Категории Objective-C позволяют программисту добавлять методы в существующий класс без необходимости перекомпилировать этот класс или даже иметь доступ к его исходному коду.

Миксины

Некоторые языки имеют специальную поддержку миксинов, хотя в любом языке с множественным наследованием миксин-это просто класс. Который не представляет отношения типа is-a. Миксины обычно используются для добавления одних и тех же методов к нескольким классам; например. Класс UnicodeConversionMixin может предоставить метод. Называемый unicode_to_ascii при включении в классы FileReader и WebPageScraper, которые не имеют общего родителя.

Частичное

В языках, поддерживающих эту функцию, частичный класс-это класс. Определение которого может быть разделено на несколько частей в пределах одного файла исходного кода или между несколькими файлами.[45] Фрагменты объединяются во время компиляции. Что делает вывод компилятора таким же. Как и для непарциального класса.

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

Другие преимущества и эффекты функции частичного класса включают в себя:

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

Частичные классы существовали в Smalltalk под именем расширений классов в течение значительного времени. С появлением .NET framework 2Microsoft представила частичные классы , поддерживаемые как в C# 2.0, так и в Visual Basic 2005. WinRT также поддерживает частичные классы.

Пример в VB.NET

Это простой пример. Написанный на Visual Basic .NET, показывает. Как части одного и того же класса определяются в двух разных файлах.

файл1.vb
Частичный Класс MyClass Private _name Как  Конечный Класс Строки 
file2.vb
Частичный Класс MyClass Public Readonly Property Name() As String Get Return _name End Get End Property End Class 

При компиляции результат такой же. Как если бы два файла были записаны как один, как это:

Класс MyClass Private _name As String Public Readonly Property Name() As String Get Return _name End Get End Property End Class 

Пример в Objective-C

В Objective-Cчастичные классы . Также известные как категории, могут даже распространяться на несколько библиотек и исполняемых файлов . Как в следующем примере. Но ключевое отличие заключается в том. Что категории Objective-C могут перезаписывать определения в другом объявлении интерфейса и что категории не равны исходному определению класса (первое требует последнего).[46] Вместо этого частичный класс .NET не может иметь конфликтующих определений. И все частичные определения равны другим.[45]

В Foundation. Заголовочный файл NSData.h:

@interface NSData : NSObject - (id)initWithContentsOfURL:(NSURL *)URL; //... @end 

В пользовательской библиотеке. Отдельном двоичном файле от Foundation framework. Заголовочный файл NSData+base64.h:

#import  @interface NSData (base64) - (NSString *)Base64String; - (id)initWithBase64String:(NSString *)Base64String; @end 

А в приложении-еще один отдельный двоичный файл. Файл исходного кода main.m:

 #импорт  инт основной(инт АГДС, типа char *переменной argv[]) { если (условие argc  2) вернуться EXIT_FAILURE; NSString *sourceURLString = [NSString stringWithCString:argv в[1]]; формат NSData *данные = [[NSData Для к alloc] initWithContentsOfURL:[NSURL URLWithString:sourceURLString]]; NSLog(@, [сведения base64String]); вернуться EXIT_SUCCESS; } 

Диспетчер найдет оба метода. Вызываемые через экземпляр NSData. И правильно вызовет их оба.

Деинсталляция

Неинсталлируемые классы позволяют программистам группировать вместе поля и методы каждого класса. Доступные во время выполнения без экземпляра класса. Действительно. Создание экземпляров для такого класса запрещено.

Например, в C# класс с пометкой конструкторов экземплярови является запечатанным. [47]

Безымянный

Безымянный класс или анонимный класс-это класс. Который не привязан к имени или идентификатору при определении. Это аналогично именованным и безымянным функциям.

Преимущества организации программного обеспечения в классы объектов делятся на три категории:[48]

  • Быстрое развитие
  • Простота обслуживания
  • Повторное использование кода и конструкций

Классы объектов облегчают быструю разработку. Поскольку они уменьшают семантический разрыв между кодом и пользователями. Системные аналитики могут разговаривать как с разработчиками. Так и с пользователями. Используя практически один и тот же словарь. Говоря о счетах, клиентах. Счетах и т. Д. Объектные классы часто облегчают быструю разработку. Поскольку большинство объектно-ориентированных сред оснащены мощными средствами отладки и тестирования. Экземпляры классов могут быть проверены во время выполнения. Чтобы убедиться. Что система работает должным образом. Кроме того, вместо того. Чтобы получать дампы основной памяти. Большинство объектно-ориентированных сред интерпретировали возможности отладки. Чтобы разработчик мог точно проанализировать. Где в программе произошла ошибка, и увидеть. Какие методы были вызваны к каким аргументам и с какими аргументами.[49]

Классы объектов облегчают обслуживание с помощью инкапсуляции. Когда разработчикам нужно изменить поведение объекта. Они могут локализовать изменение только для этого объекта и его составных частей. Это снижает вероятность нежелательных побочных эффектов от улучшений технического обслуживания.

Повторное использование программного обеспечения также является основным преимуществом использования объектных классов. Классы облегчают повторное использование через наследование и интерфейсы. Когда требуется новое поведение. Оно часто может быть достигнуто путем создания нового класса и наследования этим классом поведения по умолчанию и данных его суперкласса. А затем адаптировать некоторые аспекты поведения или данных соответственно. Повторное использование через интерфейсы (также известные как методы) происходит. Когда другой объект хочет вызвать (а не создать новый вид) какой-то объектный класс. Этот метод повторного использования устраняет многие распространенные ошибки. Которые могут попасть в программное обеспечение. Когда одна программа повторно использует код из другой.]

Представление во время выполнения

Как тип данных. Класс обычно рассматривается как конструкция времени компиляции.[51] Язык или библиотека могут также поддерживать прототипные или фабричные метаобъекты, которые представляют информацию о классах во время выполнения или даже представляют метаданные. Обеспечивающие доступ к средствам отражения и возможность манипулировать форматами структуры данных во время выполнения. Многие языки различают этот вид информации типа времени выполнения о классах из класса на том основании. Что информация не нужна во время выполнения. Некоторые динамические языки не делают строгих различий между конструкциями времени выполнения и времени компиляции и поэтому могут не различать метаобъекты и классы.

Например, если Человек-это метаобъект, представляющий класс Person. То экземпляры класса Person могут быть созданы с помощью средств метаобъекта Human.

См. также

Примечания

  1. ^ b
  2. ^ b . Справочник по языку Python. Программный фонд Python. Проверено 2012-04-26.
  3. ^ . Учебник по языку C++. cplusplus.com… Проверено 2012-04-29.
  4. ^ . Учебник по языку C++. cplusplus.com. Проверено 2012-04-29.
  5. ^ Jamrich, Parsons. June (2015-06-22). Новые перспективы компьютерных концепций, 2016. Всесторонне. Бостон, Массачусетс ISBN 9781305271616 . OCLC 917155105.
  6. ^ b . Учебные Пособия По Java. Оракул. 2012-04-19.
  7. ^ Не возвращайте ссылки на личные данные. CERT C++ Secure Coding Standard. Университет Карнеги-Меллона. 2010-05-10. Архивирован с оригинала на 2015-10-03. Проверено 2012-05-07.
  8. ^ Бен-Ари, Мордехай (2007-01-24). (PDF). Ошибки компиляции и выполнения в Java. Проверено 2012-05-07.
  9. ^ b Дикий, Фред. . У доктора Добба. UBM Techweb. Проверено 2012-05-02.
  10. ^ Томас; Хант. . Программирование Ruby: Руководство прагматичного программиста. Ruby-Doc.org. Проверено 2012-04-26.
  11. ^ . Учебник по языку C++. cplusplus.com. Проверено 2012-04-26.
  12. ^ b . Учебные Пособия По Java. Оракул. Проверено 2012-05-01.
  13. ^ Берфельд, Мария (2 декабря 2008). . IBM. Проверено 20 декабря 2013года .
  14. ^ Якобсен, Ивар; Магнус Кристерсон; Патрик Йонссон; Гуннар Овергаард (1992). Объектно-Ориентированная Программная инженерия. Addison-Wesley ACM Press. ISBN 0-201-54435-0.
  15. ^ Knublauch, Holger; Oberle, Daniel; Tetlow, Phil; Wallace, Evan (2006-03-09). . W3C. Проверено 2008-07-30.
  16. ^ b Белл, Дональд. . девелопер Работает. IBM. Проверено 2012-05-02.
  17. ^ b . Учебник по языку C++. cplusplus.com… Проверено 2012-05-02.
  18. ^ . Учебные Пособия По Java. Оракул. Проверено 2012-05-02.
  19. ^ . Руководство по PHP. Группа PHP. Проверено 2012-05-02.
  20. ^ . Руководство по программированию на C#. Microsoft. Проверено 2013-08-15.
  21. ^ . Руководство по программированию на C#. Проверено 2012-05-02.
  22. ^ . XL C/C++ V8.0 для AIX. IBM. Проверено 2012-05-07.
  23. ^ . XL C/C++ V8.0 для AIX. IBM. Проверено 2012-05-07.
  24. ^ . XL C/C++ V8.0 для AIX. IBM. Проверено 2012-05-07.
  25. ^ . pharo.gforge.inria.fr… Проверено 2016-10-31.
  26. ^ Томас, Хант. . Программирование Ruby: Руководство прагматичного программиста. Ruby-Doc.org… Проверено 2012-05-08.
  27. ^ . Метаобъектный протокол Объектной системы Common Lisp. Ассоциация пользователей Lisp. Архивировано с оригинала на 2010-11-15годы . Проверено 2012-05-08.
  28. ^ . Ссылка на C#. Microsoft. Проверено 2012-05-08.
  29. ^ . Учебники по Java. Оракул. Проверено 2012-05-08.
  30. ^ . Руководство по PHP. Группа PHP. Проверено 2014-08-21.
  31. ^ . Платформа Java. Standard Edition 7: Спецификация API. Оракул. Проверено 2012-05-08.
  32. ^ Бренд, Sy. . Блог команды Microsoft C++. Получено 4 апреля 2020года .
  33. ^ . Учебник по Python. Python.org. Проверено 3 марта 2018года . Как и в случае с модулями. Классы имеют динамическую природу Python: они создаются во время выполнения и могут быть изменены после создания.
  34. ^ b c maira; BillWagner; tompratt-AQ (2015-09-19), , Руководство по программированию на C#, Microsoft, 2018-08-08
  35. ^ Apple (2014-09-17), , Программирование с Objective-C, Apple, извлечено 2018-08-08
  36. ^ . Руководство по программированию на C#. Microsoft. Проверено 2012-05-08.
  37. ^ . oracle.com. Корпорация Проверено 13 декабря 2013года .
  38. ^ Буч, Грейди; Роберт А. Максимчук; Майкл У. Энгл; Бобби Дж. Янг, доктор философии; Джим Коналлен; Келли А. Хьюстон (30 апреля 2007). Объектно-ориентированный анализ и проектирование с приложениями. Addison-Wesley Professional. pp. 1-28. ISBN 978-0-201-89551-3. Проверено 20 декабря 2013года . Существуют фундаментальные ограничивающие факторы человеческого познания; мы можем устранить эти ограничения с помощью декомпозиции. Абстракции и иерархии.
  39. ^ Якобсен, Ивар; Магнус Кристерсон; Патрик Йонссон; Гуннар Овергаард (1992). Объектно-Ориентированная Программная инженерия. Addison-Wesley ACM Press. ISBN 0-201-54435-0.
  40. ^ (PDF). Рабочий проект. Стандарт для языка программирования С++. ISO/IEC JTC1/SC22 WG21. Получено 5 января 2020года .

Дальнейшее чтение

Внешние ссылки