![]() ![]() ![]() 4552 / 2750 / 487
Регистрация: 28.04.2012
Сообщений: 8,676
|
|||||||||||||||||||||||||||||||
[Заметка] Небольшой пример ООП30.07.2013, 23:08. Показов 2993. Ответов 13
Метки нет Все метки)
(
Go поддерживает объектный подход к программированию, однако немного иначе, нежели традиционные ООП-модели (Simula-подобная и SmallTalk-подобная). Вот небольшой пример на основе этого поста:
файл $GOPATH/src/oop/polymorphism/polymorphism.go играет роль UFormOOP.pas
файл $GOPATH/src/oop/polymorphism/base/calculator.go играет роль UOOPBaseClass.pas
В отличие от многих современных языков, в Go нет поддержки параметрического полиморфизма (шаблоны или дженерики), поэтому методы типа list.List используют в качестве типа значений элементов interface{}, что равносильно, например, Object в Java или TObject в Delphi. При приведении типа (type cast) отсутствует проверка корректности приведения, т.к. функция AddToList гарантирует, что в список будут добавлены только объекты, поддерживающие интерфейс Calculator. В противном случае код выглядел бы немного иначе:
Также мы определили две функции-конструктора для обоих типов, это распространенная практика в Go. Как вы заметили здесь не указывается явно, что Sum и Div реализуют интерфейс Calculator, в этом нет необходимости, т.к. методы не принадлежат интерфейсам, интерфейсы лишь описывают сигнатуры методов, которые должны быть реализованы для типа, чтобы значение этого типа можно было использовать там, где требуется объект с таким интерфейсом (в частности в функциях AddToList, RemoveToList и CalcAll из пакета "base"). Пример выполнения:
2
|
30.07.2013, 23:08 | |
Ответы с готовыми решениями:
13
[Заметка] Небольшой пример работы с Web
Пример ООП на D |
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 524
|
|
28.01.2014, 10:25 | |
Прошу заметить, что я не начал холивар. Просто очень заинтересовало. Везде читал, что ООП -новая парадигма програм. А тут разработчики нового языка Go решили сделать новый язык, который лишен всех недостатков присущих другим языкам И вот те НА
Нет Он не вполне ОО В нем есть подобие создания объектов, но это совсем не "ВПОЛНЕ ОО"
0
|
![]() ![]() ![]() 4552 / 2750 / 487
Регистрация: 28.04.2012
Сообщений: 8,676
|
|
28.01.2014, 12:29 [ТС] | |
0
|
48 / 48 / 6
Регистрация: 24.12.2009
Сообщений: 524
|
|
28.01.2014, 17:50 | |
Что??? Go НЕ ООП язык!!! korvin_, Вы флудите Хотелось бы услышать адекватный ответ А не ваше "обоснуй"
Я слышал, что требуют везде писать в стиле ООП, но не понимаю зачем. Создание классов может себя оправдывать в некоторых случаях Но чтобы использовать везде повсеместно... Это как PHP-прогеры пробуют писать в стиле ООП Хотел бы я увидеть, как это выглядет ![]()
0
|
![]() 3 / 3 / 1
Регистрация: 10.11.2012
Сообщений: 63
|
|
13.03.2014, 01:06 | |
2) Как мне кажется, код, написанный в стиле ООП легче понимать. Все разбито на блоки, зависимость которых можно проследить. Это намного проблематичнее сделать если писать одними функциями.
0
|
![]() 1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
13.03.2014, 03:45 | |
а так же наследование и объекты в ООП разрезе.
ООП не стиль. Это один из концептов проектирования вычислительной модели. И совершенно не самый простой в "понимании". Вам просто не достает опыта. Это пройдет со временем. Вы рассуждаете о концептах опираясь на конкретные реализации. Это неправильно вот почему: конкретная реализация очень редко (чаще всего никогда) не соответствует конкретно одной парадигме программирования просто потому что это глупо. Надо брать лучшее из разных парадигм если это возможно (и нужно). Так в haskell есть наследование, полиморфизм, ... хотя именно этот ЯП преподносится как "чистый" функциональный язык программирования. Да и вообще, как утверждает один "местный посетитель" -- "пуризм не есть хорошо". В этом я с ним солидарен.
1
|
13.03.2014, 03:45 | ||||||
Помогаю со студенческими работами здесь
14
Пример решения типичной ООП задачи на языке Haskell Я сделал небольшой туду лист там должно сохранятся новая информация (новая заметка) которая я ввела но она не сохраняется Пример небольшой игры Нужен небольшой пример с конвертерами Небольшой пример адаптивной верстки Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Как использовать Behavior Graph в Unity при создании игрового AI
GameUnited 14.04.2025
Искусственный интеллект в играх прошел долгий путь эволюции. От простейших алгоритмов, движущих призраками в Pac-Man, до сложных систем, управляющих поведением персонажей в современных AAA-проектах. . . .
|
Создание и стилизация списков в SwiftUI
mobDevWorks 14.04.2025
Списки — фундаментальный элемент мобильных интерфейсов. От списка контактов до ленты новостей, от настроек до каталога товаров — трудно представить приложение, которое не использовало бы этот. . .
|
Паттерн SAGA и распределённые транзакции в микросервисной архитектуре
stackOverflow 14.04.2025
Переход от монолитной архитектуры к микросервисам принес множество преимуществ: гибкость разработки, независимость развертывания и масштабирования отдельных компонентов. Однако этот переход создал и. . .
|
Кастомные аллокаторы в C++ и оптимизация управления памятью
bytestream 14.04.2025
Работа с памятью в С++ всегда была и остаётся одной из самых увлекательных и сложных задач для программиста. Любой опытный C++ разработчик подтвердит: стандартные механизмы аллокации памяти – штука. . .
|
Организация сетей в Kubernetes и эффективное развертывание
Mr. Docker 14.04.2025
Сетевая инфраструктура Kubernetes представляет собой сложную, но хорошо спроектированную систему, которая позволяет контейнерам взаимодействовать между собой и с внешним миром. За кажущейся простотой. . .
|
Многопоточность в Rust: Fearless concurrency и практические примеры
golander 14.04.2025
Многопоточное программирование связано с рядом известных проблем. Наиболее распространенные из них — гонки данных (data races), взаимные блокировки (deadlocks) и условия гонки (race conditions). Эти. . .
|
Списки и кортежи в Python: различия, особенности, применение
py-thonny 13.04.2025
Python славится своей гибкостью при работе с данными. В арсенале языка есть две основные последовательные структуры данных, которые программисты используют ежедневно — списки и кортежи. Эти структуры. . .
|
Middleware в ASP.NET Core
UnmanagedCoder 13.04.2025
В ASP. NET Core термин "middleware" занимает особое место. Что же это такое? Middleware представляет собой программные компоненты, которые формируют конвейер обработки HTTP-запросов в приложении. . . .
|
Таблицы лута в Unity с MinMaxCurve и AnimationCurve
GameUnited 12.04.2025
Создание сбалансированного лута в играх — задача не из простых. Разработчики постоянно ищут способы настройки систем выпадения предметов, которые будут одновременно справедливыми для игроков и. . .
|
std::expected в C++: Управление ошибками
bytestream 12.04.2025
Обработка ошибок всегда была важной и одновременно сложной задачей в программировании на C++. На протяжении долгого времени разработчики использовали различные подходы: возвращаемые коды ошибок,. . .
|