|
Зачем абстрактные классы? C# и не только | ☑ | ||
---|---|---|---|---|
0
Shur1cIT
08.07.15
✎
10:28
|
Решил посмотреть другие языки программирования помимо 1с, про ООП почитал видео посмотрел. так и не понял зачем создавать абстрактный класс, а потом на основании него создавать потомка в котором должны быть описаны алгоритм методов? почему бы сразу не создать класс и в нем не прописать алгоритм методов? и при необходимости от него создавать потомков добавляя например новые методы?
|
|||
21
Draziw
08.07.15
✎
10:43
|
Могу на примере перивести
допустим надо создать обработку отрисовки нескольких объектов, объекты разноплановые и единственное что их объединяет - это то что их можно рисовать. Создаем абстрактный класс GLESObject например. А от него наследуем все остальное Rectangle2D extends GLESObject Cube3D extends GLESObject CubeMap3D extends GLESObject в которых уже мы непослередственно всю реализацию и отрисовку прописываем. после создания объектом, наб будет достаточно пробижаться по массиву объектов GLESObject чтобы их все нарисовать сразу, и не потребуется перебирать массивы по отдельности для каждого класса. for (GLESObject tekObject:sceneLayer) { GLES20.glUseProgram(tekObject.getShaderProgramInstance().programHandler); tekObject.draw(viewMatrix,projectionMatrix, timer); } |
|||
22
megabax
08.07.15
✎
10:44
|
(17) В C#, например, класс может наследовать несколько интерфейсов, а несколько классов не может. Хотя, в C++ пошли другим путем, сделали множественное наследование. А вообще, интерфейс как вариант, применяется там, где надо создать СCOM-объект.
|
|||
23
Garykom
гуру
08.07.15
✎
10:45
|
я не понял это форум 1С-ников или "канал об аниме" ?
|
|||
24
Господин ПЖ
08.07.15
✎
10:45
|
>в C++ пошли другим путем, сделали множественное наследование
порочная практика |
|||
25
Asmody
08.07.15
✎
10:45
|
(23) одинесники не программисты
|
|||
26
Asmody
08.07.15
✎
10:46
|
(24) Всё наблюдаемое многообразие ЯП из-за несовершенства C++
|
|||
27
megabax
08.07.15
✎
10:47
|
(24) Да, действительно, там даже есть такое понятие, как виртуальный класс, что бы он два раза не наследовался.
|
|||
28
Serginio1
08.07.15
✎
10:47
|
Самый простой пример это Stream. Используя единый интерфейс ты можешь читать хоть откуда. Из файла, из WebResponse из базы данных итд
|
|||
29
Jokero
08.07.15
✎
10:48
|
В родительском классе описываются общие методы и переменные для всех потомков. Потом ты можешь в потомке изменить или добавить метод и переменную, а можешь этого и не делать и она спокойно унаследуется к потомку, при этом ее не надо снова описывать.
|
|||
30
Живой Ископаемый
08.07.15
✎
10:48
|
Абстрактные классы и интерфейсы и протоколы - для реализации одних из самых важных паттернов:
Фабрика, Абсрактная Фабрика, Делегирование. Для 1Сников. у тебя один абстрактный класс, который говорит что, чтобы класс ему соответсвовал (conforms to), тот должен иметь вот такие-то обязательные свойства и методы. Потом ты например объявляешь процедуру func MyProcedure(SomeInstance: MyProtocol) А когда вызываешь эту процедуру, то уже пишешь: MyProcedure(MyInstanceOfFirstClassConformedToMyProtocol) MyProcedure(MyInstanceOfSeconfClassConformedToMyProtocol) То есть по сути Абстрактный класс ну... помогает абстрагироваться от конкретного типа. |
|||
31
Ненавижу 1С
гуру
08.07.15
✎
10:49
|
про NULL и Неопределено еще рано?
|
|||
32
toypaul
гуру
08.07.15
✎
10:49
|
"почему бы сразу не создать класс и в нем не прописать алгоритм методов" - а кто сказал, что так не делают? как раз так и делают. но прописывают "алгоритмы" общие для всех потомков.
|
|||
33
Гёдза
08.07.15
✎
10:50
|
Придумать правильную топологию классов для программы отнюдь не простая задача
|
|||
34
Живой Ископаемый
08.07.15
✎
10:50
|
2(31) Optionals?
|
|||
35
Garykom
гуру
08.07.15
✎
10:50
|
(30) как бы 1С-ники пользуются "абстрактными классами" совершенно об этом не задумываясь
когда вызывают .Записать(); для объекта справочника |
|||
36
Волшебник
модератор
08.07.15
✎
10:51
|
(31) пусть поближе подойдут
|
|||
37
Бубка Гоп
08.07.15
✎
10:52
|
(35) еще есть модуль менеджера
|
|||
38
Serginio1
08.07.15
✎
10:52
|
28+ виртуальные методы в отличие от методов интерфейсов наследуются. То есть меньше писанины
|
|||
39
Serginio1
08.07.15
✎
10:53
|
(35) Это утинная типизация. Нет наследования
|
|||
40
ДенисЧ
08.07.15
✎
10:53
|
(0) Если ты не знаешь, что такое абстрактный класс, то это тебе не надо...
|
|||
41
Господин ПЖ
08.07.15
✎
10:54
|
(37) это static. причем тут абстракция
|
|||
42
Ненавижу 1С
гуру
08.07.15
✎
10:55
|
(39) можно сказать, что класс автоматически реализует "интерфейс имеющий метод Записать", как только у него есть этот метод )))
ну собственно да, утиная типизация и все абсолютно методы виртуальны )) |
|||
43
Ненавижу 1С
гуру
08.07.15
✎
10:56
|
(41) ближе к дельфийским class method
чем к static method |
|||
44
megabax
08.07.15
✎
10:56
|
(40) А ты с самого рождения знал, что такое абстрактный класс?
|
|||
45
Serginio1
08.07.15
✎
10:57
|
(41) В Delphi есть такое понятие как метаклассы. Виртуальный конструктор, виртуальные методы класса
class Function StaticVirt:String; virtual; http://rsdn.ru/forum/delphi/559531.flat.1 |
|||
46
Garykom
гуру
08.07.15
✎
10:58
|
Попробовал глянуть на эту ветку отстраненно... хуже только математики с их "абстракциями"
(44) он в его методе потомка родился... |
|||
47
Господин ПЖ
08.07.15
✎
10:58
|
забудьте уже про дельфи как про страшный сон
|
|||
48
Garykom
гуру
08.07.15
✎
10:59
|
(47) счего бы? точнее с удовольствием бы забыли но на чем (кроме с++ на котором слишком тормозно писать) можно сделать кроссплатформенный код который не требует туеву тучу фремворков и прочих окружений?
|
|||
49
megabax
08.07.15
✎
11:00
|
(35) Вот в 1С-ке очень ОПП, кстати, не хватает. Как было бы хорошо, если бы когда мне потребовалось написать, например, свою расходную накладную, я типа объявил бы потомка класса РасходнаяНакладная и реализовал бы у нее какие то свои методы.
|
|||
50
Ненавижу 1С
гуру
08.07.15
✎
11:00
|
(47) ну почему? реализация метакласса на уровне языка была неплохой, хотя и страдала проблемой - нельзя было сокрыть конструкторы, из-за общего предка TObject
|
|||
51
Бубка Гоп
08.07.15
✎
11:00
|
(47) он не хочет отпускать
|
|||
52
Ненавижу 1С
гуру
08.07.15
✎
11:01
|
(49) начинается...
|
|||
53
fisher
08.07.15
✎
11:01
|
(22) Как бы наоборот. Интерфейсы придумали, поглядев на проблемы множественного наследования в С++. Чтобы с помощью них и ряда других инструментов языка можно было безопасно решать задачи, которые в С++ решались множественным наследованием.
|
|||
54
Garykom
гуру
08.07.15
✎
11:01
|
(52) да ладно пусть помечтает об 1С++ для 8-ки
|
|||
55
Господин ПЖ
08.07.15
✎
11:02
|
(49) Вот в 1С-ке очень ОПП, кстати, не хватает.
1с тут вполне ООП... у тебя РасходнаяНакладная просто изолирована |
|||
56
Mikeware
08.07.15
✎
11:02
|
(54) злой ты
|
|||
57
Лефмихалыч
08.07.15
✎
11:02
|
(0) если почтиать мануал какой-нибудь, то ответ там будет дан. Абстрактные классы для того, чтобы просто сгруппировать набор абстрактных методов, которым не нужен ни какой инстанс для работы. Math, например, в C#, - ни какого объекта ему не придумать, а функции его нужны
|
|||
58
ДенисЧ
08.07.15
✎
11:03
|
(44) Lf
|
|||
59
Лефмихалыч
08.07.15
✎
11:03
|
(47) опасностьЪ! тебя щас Ежов покусает
|
|||
60
Ненавижу 1С
гуру
08.07.15
✎
11:03
|
(57) Math вроде не абстрактный, а статический класс
|
|||
61
Господин ПЖ
08.07.15
✎
11:03
|
>Абстрактные классы для того, чтобы просто сгруппировать набор абстрактных методов, которым не нужен ни какой инстанс для работы
для этого есть статика |
|||
62
Господин ПЖ
08.07.15
✎
11:04
|
абстрактность решает другие задачи
|
|||
63
Лефмихалыч
08.07.15
✎
11:04
|
(60) эмм... да, именно, я одно с другим попутал. в (75) деза. прошу парощения
|
|||
64
ДенисЧ
08.07.15
✎
11:04
|
(53) в с++ нет проблем с множественным наследованием. Они есть у тех, кто не умеет его использовать
|
|||
65
fisher
08.07.15
✎
11:04
|
(57) Для этой задачи вовсе не нужна отдельная сущность. Так что нормальный новичковый вопрос в сабже.
|
|||
66
Гёдза
08.07.15
✎
11:05
|
(57) Чем в данном случае класс лучше модуля с процедурами?
|
|||
67
Shur1cIT
08.07.15
✎
11:05
|
(49) если ООП появиться в 1С, то 1с рынок ларёчников потеряет ибо настройка 1с им станет дороже, так как другого уровня спецы понадобиться.
|
|||
68
Гёдза
08.07.15
✎
11:05
|
Понятно, что в жаве например все через классы, но это не от хорошей жизни
|
|||
69
Ненавижу 1С
гуру
08.07.15
✎
11:05
|
(66) для статических ничем, фактически это просто аналог namespace
|
|||
70
Serginio1
08.07.15
✎
11:06
|
(42) Это двойная диспетчиризация (IDispatch), рефлексия вместо VMT
|
|||
71
Гёдза
08.07.15
✎
11:06
|
(67) ларечникам только галочки выставлять.
|
|||
72
Garykom
гуру
08.07.15
✎
11:06
|
(59) "Ежов" это кто?
|
|||
73
Господин ПЖ
08.07.15
✎
11:06
|
>Понятно, что в жаве например все через классы, но это не от хорошей жизни
а от какой? зато все единообразно... все перепаковывается в Object |
|||
74
Гёдза
08.07.15
✎
11:06
|
(71) как собственно во всем мире и бывает. Никакой ларек не пишет для себя своего ПО
|
|||
75
Лефмихалыч
08.07.15
✎
11:07
|
(0) Абстрактный класс - это интерфейс. Он нужен, чтобы описать поведение для множественного наследования.
Множественное наследование имплементации - штука, имеющая право на жизнь и реализуемая, но требующая больше трахотни от производителя компилатора. По этому в современных языках это не модно. |
|||
76
megabax
08.07.15
✎
11:07
|
(66) Тем что можно создать экземпляр класса, но вот экземпляр модуля с процедурами ты не можешь создать.
|
|||
77
Лефмихалыч
08.07.15
✎
11:07
|
(72) Hadgehogs
|
|||
78
Lama12
08.07.15
✎
11:07
|
(20) До этого сообщения я еще был в курсе обсуждения :)
Придется обновлять знания. |
|||
79
Garykom
гуру
08.07.15
✎
11:07
|
(68) там даже проперти нет... как уже задрали эти "геттеры" и "сеттеры"
точнее когда на яве долго пишешь то привыкаешь и норм... зато когда с чего то другого возвращаешься... |
|||
80
Лефмихалыч
08.07.15
✎
11:08
|
+(75) то есть, если вопрос в том, почему нельзя без них, то ответ - да можно. Заморочек больше просто.
|
|||
81
Draziw
08.07.15
✎
11:08
|
(66) Модуль это и есть класс :) в c#, java нет модулей если что :)
|
|||
82
Гёдза
08.07.15
✎
11:08
|
(79) в жаве нет проперти????
|
|||
83
Ненавижу 1С
гуру
08.07.15
✎
11:08
|
(76) экземпляр статического класса не создашь
|
|||
84
Гёдза
08.07.15
✎
11:08
|
(82) или что ты подразумеваешь под проперти?
|
|||
85
Garykom
гуру
08.07.15
✎
11:08
|
(82) да
но можно скалу юзать... |
|||
86
fisher
08.07.15
✎
11:09
|
(64) Так в этом и проблема. На больших проектах самые разные люди в команду приходят и уходят. Поэтому чем грамотнее сама среда даёт по рукам - тем лучше продукт при прочих равных.
|
|||
87
Asmody
08.07.15
✎
11:09
|
Далось вам это "ООП в 1С". Люди создают новые ЯП вообще без ООП, и ничего, прекрасно развиваются.
|
|||
88
Garykom
гуру
08.07.15
✎
11:09
|
(84) код работающий при присваивании/получении значения "реквизита" объекта
|
|||
89
Ненавижу 1С
гуру
08.07.15
✎
11:09
|
(79) ну зато и нет проблемы:
Obj.MyProperty.Item = 10; ой, а значение Item осталось старым |
|||
90
Лефмихалыч
08.07.15
✎
11:10
|
(84) конструкию, которая для программиста, смотрящего на исходник, выглядит, как поле класса, но на самом деле компилятором разворачивается в вызов get_() и set() методов для доступа к внутреннему сосотянию объекта
|
|||
91
megabax
08.07.15
✎
11:10
|
(87) Вообще то ООП - самая удобная форма программирования. Во всех других подходах приходиться выворачивать мозги наизнанку, классический пример - F#, lisp.
|
|||
92
Garykom
гуру
08.07.15
✎
11:11
|
(88) там нуна староеЗначение = Объекта1.getЗначение() и Объекта1.setЗначение(новоеЗначение)
|
|||
93
Garykom
гуру
08.07.15
✎
11:11
|
(89) "очень смешно"
|
|||
94
Господин ПЖ
08.07.15
✎
11:12
|
>Люди создают новые ЯП вообще без ООП, и ничего, прекрасно развиваются.
языков тьма, а вакансии все по java/c#/c++/ios/php |
|||
95
Garykom
гуру
08.07.15
✎
11:12
|
(91) asm
|
|||
96
Asmody
08.07.15
✎
11:13
|
(91) Вообще ничего не приходится выворачивать. Ну разве что, в Haskell
|
|||
97
Garykom
гуру
08.07.15
✎
11:14
|
(94) не ну я конечно в курсе что на php можно с классами писать... но не одного вживую реально юзаещего (самому пишущего новые) не только готовые фреймворки полбзующего не видал...
|
|||
98
Asmody
08.07.15
✎
11:20
|
(97) А фреймворки нам даны высшими силами?
|
|||
99
Живой Ископаемый
08.07.15
✎
11:22
|
автор понял про абсрактные классы?
|
|||
100
Живой Ископаемый
08.07.15
✎
11:22
|
а, понял еще в (18). ок.
|
|||
101
Garykom
гуру
08.07.15
✎
11:28
|
(98) а платформа 1С нам кем дана?
|
|||
102
Garikk
08.07.15
✎
11:33
|
платформа дана вендором, а фреймворки это деятельность сообщества
несколько разные вещи. Без платформы ничего сделать не получится, а без фреймворка запросто. |
|||
103
megabax
08.07.15
✎
11:39
|
(95) Ну это только для микроконтроллеров всяких, потому что там все равно иного выхода нет.
|
|||
104
kyvv
08.07.15
✎
11:41
|
А почему в 1с для ссылочных типов значение совпадает с типом?
|
|||
105
Гёдза
08.07.15
✎
11:42
|
(104) Пруф в студию
|
|||
106
kyvv
08.07.15
✎
11:45
|
(105) Если я тебя правильно понял, то глянь в отладчике, там в табличке выводится Тип и Значение.
|
|||
107
Ненавижу 1С
гуру
08.07.15
✎
11:46
|
(104) чего?
|
|||
108
kyvv
08.07.15
✎
12:11
|
(105,107) Если что не так, то первый блин.
http://s019.radikal.ru/i602/1507/2c/cf9d7a4c2e15.png |
|||
109
Господин ПЖ
08.07.15
✎
12:12
|
зобанить за упоротость
|
|||
110
Ненавижу 1С
гуру
08.07.15
✎
12:13
|
(108) ну это простостроковое представление совпадает с типом, а что иначе там показывать?
|
|||
111
Asmody
08.07.15
✎
12:19
|
(104) Есть такое понятие "строковое представление значения типа".
|
|||
112
kyvv
08.07.15
✎
12:33
|
(110)Если есть класс, значит должны быть объекты(значения)? Но я не программист.
|
|||
113
Garikk
08.07.15
✎
12:37
|
(112) какие значения вам нужны?
что вы хотите увидеть в поле "значение" у объектного типа? |
|||
114
kyvv
08.07.15
✎
12:46
|
(113)СправочникОбъект тип, Контрагенты - Значение
|
|||
115
Garikk
08.07.15
✎
12:48
|
(114) И? МенеджерВременныхТаблиц - тип, какое вам надо там значение?
|
|||
116
Ненавижу 1С
гуру
08.07.15
✎
12:50
|
(114) ты понимаешь, что кроме строк на экране ты ничего не видишь и каждый класс/тип сам решает как ему отображать свои объекты
СправочникОбъект.Контрагенты отображает свое Наименование МенеджерВременныхТаблиц отображает строку "МенеджерВременныхТаблиц" |
|||
117
Лефмихалыч
08.07.15
✎
12:50
|
(114) Контрагенты - тоже тип
|
|||
118
kyvv
08.07.15
✎
12:56
|
(115,116) Это исключение, пусть будет строковое представление.
(117) Дурят нас? |
|||
119
Garikk
08.07.15
✎
12:57
|
(118) вообще во "взрослых" языках, точно также это устроено
|
|||
120
kyvv
08.07.15
✎
12:58
|
(119) Смирился.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |