Модераторы: Се ля ви
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Abstract class не андестенд 
:(
    Опции темы
Logree
Дата 28.1.2008, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 331
Регистрация: 22.11.2006
Где: Самара

Репутация: нет
Всего: 2



Здравствуйте уважаемые.. не мог бы кто дать пример где явно показан случай в котором  использование абстрактных классов рациананально.... ну ни как я не могу понять  зачам их использовать... они дают ещё какие нибудь приимущества кроме экономии памяти?


--------------------
Самый распространенный способ дебага пятиста строк ассемблерного кода - очень долгий, очень пристальный и очень задумчивый взгляд.
PM MAIL ICQ   Вверх
skyboy
Дата 28.1.2008, 00:51 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260




M
skyboy
я думаю, это вопрос - в общем по ООП, потому как концепция абстрактных классов не является уникальным достоянием PHP. Потому едем в "Философию программирования"


Добавлено через 4 минуты и 52 секунды
вообще, прелесть абстрактных классов - в первую очередь, далеко не в экономии памяти. А именно в абстрагировании. Они - это крайний случай предков нескольких разных по логике, но схожих по интерфейсу классов. К примеру, абстрактный класс "передвижной объект" с единственным методом "двигаться в точку" относится и к человеку, и к автомобилю. Несмотря на то, что в остальном эти классы различаются радикально. И чтоб иметь возможность передвинуть объект, независимо от того, какого класса он, можно объявить все передвижные объекты наследником класса "передвижной объект". в принципе, неважно, будет ли класс "передвижной объект" числиться абстрактным, или же будет иметь некоторую обощенную логику(к примеру, запрос e глобального объекта "окружающая среда" информации о том, может ли он передвинуться в заданную точку). Просто определение "абстрактный класс" подчеркивает: никакой наследуемой потомками логики нет: только интерфейс.
PM MAIL   Вверх
0000
Дата 28.1.2008, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 11.7.2006
Где: Нижний Новгород

Репутация: нет
Всего: 5



Код

internal abstract class Shape
{
     protected Int32 _x, _y;
     protected Color _color;

     public abstract void Draw();
     public void SetColor(Color color) {_color = color;}
     public void SetLocation(Int32 x, Int32 y) {_x = x; _y = y;}
}
internal class Circle : Shape
{
      public override void Draw() {//отрисовываем
      }
}
internal class Triangle : Shape
{
      public override void Draw() {//отрисовываем
      }
}
internal class Square : Shape
{
      public override void Draw() {//отрисовываем
      }
}



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

Код

Shape[] shapes = new Shape[3];
shapes[0] = new Circle();
shapes[1] = new Triangle();
shapes[2] = new Square();

for(Int32 i = 0; i < shapes.Length, i++)
     shapes[i].Draw();


здесь работает полиморфизм..мы имея лишь общий доступ в фигурам и фактически вызывая метод Draw у класса Shape на деле вызываем переопределенный метод в конкретном классе
PM MAIL ICQ   Вверх
skyboy
Дата 28.1.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



вобщем, абстрактные классы просто доводят концепцию полиморфизма до абсолюта: классы могут иметь абсолютно разную логику, но идентичный интерфейс. 
PM MAIL   Вверх
SaDFromSpb
Дата 28.1.2008, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 5.4.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 3



Цитата(skyboy @  28.1.2008,  16:50 Найти цитируемый пост)
вобщем, абстрактные классы просто доводят концепцию полиморфизма до абсолюта: классы могут иметь абсолютно разную логику, но идентичный интерфейс.  

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



--------------------
"За исключением части, касающейся потоков, библиотека Loki написана на стандартном языке С++. Увы, это означает, что многие современные компиляторы не смогут работать с ней в полном объеме." (А. Александреску. Modern C++ design. 2001)
PM   Вверх
chieftain
Дата 4.2.2008, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.2.2008

Репутация: нет
Всего: нет



Если говорить об абстрактных класссах в java, то эти классы собирают в себя наиболее общие методы (функции) и это на самом деле очень удобно, причем в JAVA абстрактный класс может содержать и реальные, а не только объявленные абстрактные методы.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила раздела "Философия программирования":
Се ля ви

Форум "Философия программирования" предназначен для обсуждения вопросов, так или иначе связанных с философскими аспектами разработки ПО:

• вопросы перспективного развития методов написания ПО;

• изменяющиеся языки и методологии программирования;


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Се ля ви.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Философия программирования | Следующая тема »


 




[ Время генерации скрипта: 0.0595 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.