Аннотация в программировании - PullRequest
0 голосов
/ 06 января 2011

Слово абстракция - это когда мы говорим о классе очереди или любом классе. Класс абстрактен, верно? Как слово абстракция используется в программировании? Что-то абстрактное? Что это значит?

Ответы [ 7 ]

5 голосов
/ 06 января 2011

Аннотация в ОО используется для указания того, что класс не может быть создан непосредственно и должен быть унаследован от до создания экземпляра. Wiki это хорошо объясняет.

4 голосов
/ 06 января 2011

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

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

Аналогично, если ваш класс структур данных обсуждает «абстрактный» тип данных, такой как Очередь, учитель имеет в видуОчередь как «структура данных FIFO».Немного менее абстрактно Java AbstractQueue.Конкретной очередью, на которую вы можете «указать» (не в смысле указателей и памяти, а в смысле «ТАМ это очередь!») Может быть Java's LinkedBlockingQueue

`Abstract` ... ... ... ... ... ... ... ... ...   `Concrete`
 a queue            AbstractQueue                LinkedBlockingQueue
 a group            an infinite group            positive integers
 a car         a Ford       1995 Ford Taurus     My 1995 Ford Taurus VIN# 3489230148230
1 голос
/ 06 января 2011

Хорошо, хороший пример в OO - это Animal, у вас есть абстрактный класс, например:

abstract class Animal
{
     public AnimalType Type { get; set; }
}

Теперь вы не можете прямо объявить животное, у вас должен быть класс, который наследуется от животного, как кошка:

class Cat : Animal
{
       public Cat()
       {
             Type = AnimalType.Feline; 
       }
}

Так что это не сработает:

Animal a = new Animal();

Но это будет:

Animal a = new Cat();

Итак, по сути, вы говорите, что это базовый класс, вы не можете создать его самостоятельно, вам нужно больше информации, скажем, класс, который наследует его. Трудно объяснить, поэтому надеюсь, что пример поможет!

1 голос
/ 06 января 2011

Термин «абстрактный» может означать целую кучу разных вещей, в зависимости от контекста.

Два наиболее распространенных использования «абстрактного» относятся к объектно-ориентированному программированию.Метод называется «абстрактный» (или, на языке C ++ - «чисто виртуальный»), если метод не имеет реализации.Цель абстрактного метода состоит в том, чтобы указать, что классы, которые наследуются от данного класса, будут иметь метод с заданной сигнатурой, но для этого метода нет разумного поведения по умолчанию.Типичным примером в иерархии классов фигур является то, что базовый класс фигур может иметь абстрактный метод, который рисует фигуру на экране.Нет хорошего поведения по умолчанию для рисования "фигуры" - какая это форма?- но любая отдельная фигура будет иметь конкретную реализацию этой функции.

Связанный термин - это «абстрактный класс», который представляет собой класс, содержащий абстрактный метод.Поскольку класс содержит этот абстрактный метод, вы не можете иметь конкретный объект этого типа класса.В противном случае, если вы попытаетесь вызвать абстрактный метод, вы обнаружите, что с ним не было связано никакой реализации.

В совершенно ином контексте слово «абстрактный» иногда появляется в термине «абстрактные данные».тип ", который является термином, используемым для описания объекта, поддерживающего некоторый набор математических операций, без обязательного объяснения того, как эти операции реализованы.Например, «стек», «очередь» и «список» - все это абстрактные типы данных, поскольку они описывают, какое поведение ожидается от объекта данного типа без реализации (например, динамический массив? Связанный список? Хэш-таблица?)

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

Надеюсь, это поможет!

0 голосов
/ 06 января 2011

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

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

0 голосов
/ 06 января 2011

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

Фактически существуют «абстрактные классы», где один или несколько методов являются чисто виртуальными, что означает, что они не реализуютсяэтот класс.Такой класс не может быть создан.Вместо этого вы должны извлечь из него новый класс, который реализует чисто виртуальные методы, а затем вы можете создать экземпляр второго класса.

0 голосов
/ 06 января 2011

Абстрактные классы не могут быть созданы и вместо этого наследуются другими классами, обычно конкретными.Обычно они содержат код, общий для наследования классов, чтобы минимизировать дублирование кода.

...