Форум программистов, компьютерный форум, киберфорум
ООП и паттерны
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/27: Рейтинг темы: голосов - 27, средняя оценка - 4.52
2 / 2 / 7
Регистрация: 08.05.2013
Сообщений: 139

ООП, понимание абстрактных классов/методов и т.п

12.04.2018, 11:44. Показов 5134. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю программистом и столкнулся с тем, что на проекте отказались от абстрактного класса в пользу интерфейса, но я не совсем понимаю зачем.

Собственно такой вопрос: есть ли книги/статьи где можно почитать о таких вещах, как абстрактный класс/статическая функция/интерфейс/абстрактная функция и т.д.? Или у меня пробел в основах ООП и мне нужна литература для начинающих?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.04.2018, 11:44
Ответы с готовыми решениями:

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как вынести методы из классов Panel и...

Переопределение абстрактных методов
Добрый день! Вопрос следующий: в подклассе необходимо переопределить абстрактный метод суперкласса, нужно сменить модификатор доступа с...

Защита абстрактных методов
Всем привет. Забавная вещь получается. Как мы знаем, все абстрактные методы являются публичными по умолчанию, в том же интерфейсе, но...

9
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
12.04.2018, 12:10
Лучший ответ Сообщение было отмечено Headmaster как решение

Решение

Цитата Сообщение от Headmaster Посмотреть сообщение
но я не совсем понимаю зачем.
Мода такая. Глюпая мода. Боятся распиаренной неосилянтами проблемы наследования ромбом, поэтому предпочитают кучу раз переписывать один и тот же код. При том что в языке оригинала оно не "ромбом" а "бриллиантом", и свое название оправдывает в случае грамотного применения. Ну или все на COM. Классы из DLL экспортируются только через интерфейсы, но опять же это ни как не мешает наследованию живущих в одном dll классов, реализующих интерфейсы.
Цитата Сообщение от Headmaster Посмотреть сообщение
абстрактный класс/статическая функция/интерфейс/абстрактная функция
Там читать то особо нечего.
Абстрактный метод - виртуальный метод не имеющий реализации, и соответственно требующий его реализации в потомках. Абстрактный класс - класс содержащий абстрактные методы (не может быть создан объект такого класса в следствие отсутствия части методов, под них только место в VMT зарезервировано для потомков).
Статический метод - объявлен как static и не связан с каким либо объектом класса. Соответственно не имеет доступа к нестатик полям/методам. Фактически глобальная функция в скопе класса (т.е. имеет доступ к закрытым статик-полям/методам).
Интерфейс - тупо список абстрактных методов. не может иметь ни полей данных ни реализации каких либо методов, ни невиртуальных методов. т.е. крайний случай абстрактного класса. С использованием интерфейсов реализация и поля данных не наследуются, наследуется только список виртуальных методов. Посему использование интерфейсов вместо классов в 99% случаев глюпость.
1
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
12.04.2018, 14:03
Тут вопрос подхода. Существует теория, что наследование может быть двух типов - являться и уметь. При таком подходе, например, Собака является Животным и умеет Сторожить. Согласно этой теории объект может являться только чем-то одним и при этом соединять в себе произвольное количество свойств/черт. То есть, Собака не является Сторожем. Поэтому Собака наследует Животное и реализует уменеие Сторожить.
В ОО языках, которые придерживаются такого подхода, можно наследовать только от одного класса и реализовывать произвольное количество интерфейсов. Переписывать один и тот же код кучу раз не приходится, так как к интерфесам может быть призвязан обобщённый код. В разных языках используются разные механизмы призвязывания кода к интерфейсам. Обычно они называются mixins или traits (по фразе "a class can mix in any number of traits").
1
2 / 2 / 7
Регистрация: 08.05.2013
Сообщений: 139
12.04.2018, 22:10  [ТС]
Цитата Сообщение от Fulcrum_013 Посмотреть сообщение
Там читать то особо нечего.
Абстрактный метод -
Очень понятно объяснено. Тогда ещё такую вещь как статический класс объяснить можете?

Добавлено через 6 минут
А ещё, оказывается, метаклассы есть. Сколько же всего я не знаю
0
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
13.04.2018, 00:27
Цитата Сообщение от Headmaster Посмотреть сообщение
Тогда ещё такую вещь как статический класс объяснить можете?
Статический класс может содержать только статические методы. Нельзя создать экземпляр такого класса.

з.ы. Вы на каком языке пишете? Терминология может немного отличаться.
1
 Аватар для Fulcrum_013
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
13.04.2018, 08:23
Цитата Сообщение от Headmaster Посмотреть сообщение
А ещё, оказывается, метаклассы есть.
Метакласс это структура данных содержащая описание класса. Обычно такие штуки на уровне фреймверка а не языка реализовываются. т.е. фактически список методов и свойств доступный для чтения из программы. Т.е. средство доступа к таблице рантайм-рефлекшин-информации сгененрированной компилятором для класса. Обычно имеет средства для вызова методов/установки/чтения свойств по символьному имени и/или номеру а так же создания экземпляра класса.
1
2 / 2 / 7
Регистрация: 08.05.2013
Сообщений: 139
13.04.2018, 12:09  [ТС]
Цитата Сообщение от Shamil1 Посмотреть сообщение
з.ы. Вы на каком языке пишете? Терминология может немного отличаться.
Python.


Но сейчас уже стало понятнее
0
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
13.04.2018, 12:24
Цитата Сообщение от Headmaster Посмотреть сообщение
Python.
Статические классы нужны в языках типа C# и Java, где нельзя создать функцию вне класса.
В Python нет необходимости в статических классах, так как можно создавать функции прямо в модуле.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
13.04.2018, 14:37
Цитата Сообщение от Shamil1 Посмотреть сообщение
Статический класс может содержать только статические методы. Нельзя создать экземпляр такого класса.
Это где так?
0
Модератор
Эксперт функциональных языков программирования
3135 / 2282 / 469
Регистрация: 26.03.2015
Сообщений: 8,884
13.04.2018, 15:03
Цитата Сообщение от korvin_ Посмотреть сообщение
Это где так?
Например, в C#. Например, public static class Math с методами Abs, Cos и т.п.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.04.2018, 15:03
Помогаю со студенческими работами здесь

Delphi. Использование абстрактных методов
Здравствуйте. Совсем недавно изучаю ооп в Delphi. И при написании программы возникла ошибочка. Может кто объяснить ну и помочь немножечко ...

Не вижу абстрактных методов в классе BaseAdapter
Когда создаю свой класс, наследующий BaseAdapter, требуется реализовать 4 абстрактных метода: getCount(), getItem(), getItemId, getView....

Список абстрактных классов
Здравствуйте! Прошу помочь с одной проблемой. Суть проблемы в следующем - есть 2 разных класса (Например, Photo и Music). Реализация этих...

Использование абстрактных классов
Простите заранее за нубский вопрос. Давно ничего не программировал, а тут понадобилось. Скачал библиотеку численных методов. Там...

Какое из следующих объявлений абстрактных методов абстрактного класса верно
A) public abstract Method(); B) public abstract void Method(); C) public void abstract Method(); D) public void Method() {}


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
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