Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 46

Зачем расширять класс?

03.12.2013, 21:50. Показов 1108. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Зачем расширять класс в ООП, а не добавлять новые методы сразу в родителя?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.12.2013, 21:50
Ответы с готовыми решениями:

сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь усложнять?
сегодня наконец то понял что такое КЛАСС, и ОБЪЕКТ. понято всё, кроме одного - зачем всё это? в смысле, можно же без этого? так зачем жизнь...

Зачем нужен класс MarshalByRefObject
Вы можете объяснить что позволяет делать класс MashalByRefObject? В msdn посмотрел - плохо понял.

Как справильно расширять массив?
Делаю рисовалку на openGL, там есть метод VertexPointer куда отсылается массив float с точками Так вот, как быть? Во время рисования...

5
Модератор
 Аватар для TanaTiX
2936 / 1795 / 180
Регистрация: 19.02.2011
Сообщений: 6,552
03.12.2013, 22:51
rome098, что бы иметь ряд классов с общим интерфейсом и разной реализацией.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
03.12.2013, 23:35
rome098, при большом объеме добавлений ваш код "разрастется" и станет неуправляемым. К тому же, если следовать кондициям ООП, добавлять методы не всегда является верным решением. Пара примеров для осмысления.
1. Представьте, что вы создали класс "животное"
Вы хотите определить кошку и собаку.
Что произойдет, если вы будете добавлять все в один класс?
Например, метод "есть". Рацион у кошек и собак, в общем-то, несколько различается.
А еще лучше будет пример, пускай, несколько глупый, но, зато, хорошо объясняющий (имхо): представьте, что вы определили метод "справляться с малой нуждой". Кошки ногу не задирают.. Вот и получается, что либо вам придется писать несколько, по сути, одинаковых методов (за исключением различных мелочей реализации), либо воспользоваться полиморфизмом (если честно, не знаю, как в AS обстоят дела с возможностью переопределения виртуальных методов в этом же классе), либо забить все условиями. Помимо этого, наследование позволяет более четко выразить отношения - если в классе "Кошка" определен метод "есть", то становится понятно, к примеру, что она не может съесть столько же, сколько описано в методе "есть" собаки.

Другой пример - абстрактные классы (опять же, не знаю, есть ли они в AS) и интерфейсы. В них вы можете выделить общее для некоторых классов, таким образом, убрав излишнее дублирование кода. А в интерфейсах вы можете указать методы, которые обязательно необходимо описать (памятка, чтобы не забыть). Если брать все тот же пример про собак и кошек - у всех них должны быть методы "есть" (ведь должны же они питаться), "спать"(или отдыхать) - чтобы не забыть где-то их объявить (к примеру, может получиться, что собака не может есть), используются интерфейсы..

2. Напиток. Представьте, что вы захотели описать некоторую иерархию напитков. Что для этого необходимо?
Можно разбить их на множество категорий, например:
Алкогольные/безалкогольные. В свою очередь, алкогольные можно разбить(условно, сокращенно) на пиво/вино/водка/коньяк. Безалкогольные (также, условно) на квас/сок/лимонад/минералка.
Посмотрите, сколько всего можно выделить (и это лишь по малости). Если все писать в одном классе, то он разрастется на очень большой код, чтобы учитывать все нюансы каждого напитка. Наследование позволяет нам более удобно "разбросать" код, в котором будет намного легче ориентироваться:
Создаем базовый класс "Напиток" -> создаем два подкласса "безалкогольные напитки" и "алкогольные напитки", от каждого создаем по четыре (как в примере) подкласса. Спокойно описываем общее для всех напитков в базовом классе "Напиток" (например, метод "распитие" и т.п.), спокойно описываем общее для классов "безалкогольные"/"алкогольные", спокойно описывает особенности каждого выбранного напитка. Да, конечно, все это можно реализовать и "меньшей кровью", путем определения различных свойств, но не всегда такое решение будет являться верным.

Другой пример - люди Есть родители, есть дети. Что-то дети перенимают от родителей, что-то у них свое (своя жизнь, отличная от жизни родителей). Думаю, если немного представить, то продолжение станет ясно

Как-то так, думаю, если я где-то ошибся, то меня подправят разбирающиеся..
0
03.12.2013, 23:51

Не по теме:

Тема переносится из раздела ActionScript (подраздел флеша)

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
04.12.2013, 07:43
Цитата Сообщение от rome098 Посмотреть сообщение
Зачем расширять класс в ООП, а не добавлять новые методы сразу в родителя?
http://ru.wikipedia.org/wiki/Божественный_объект
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.12.2013, 07:59
Цитата Сообщение от rome098 Посмотреть сообщение
Зачем расширять класс в ООП, а не добавлять новые методы сразу в родителя?
В родителя ты их вообще не сможешь адекватно добавить.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.12.2013, 07:59
Помогаю со студенческими работами здесь

Вариации тайтлов: стоит ли расширять?
Здравствуйте. Сейчас у меня на сайте используется тайтл вида "скачать электронную книгу пост сдал". Но если его дополнить именем...

Зачем регистрировать класс таким образом?
ATOM MyRegisterClass(HINSTANCE hInstance) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW |...

Как расширять таблицу до максимального размера?
Объяснить тяжело, показываю на скринах... P.S. к главной форме применен showMaximized(), нужно чтобы к таблице что-то подобное было...

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

Зачем объявляется класс Box в приведенном коде
вот изучаю Java. Не могу понять разницу между этим import javax.swing.*; class Box{ double width; double height; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru