Если вам недостаточно постов на тему «является ли Go ООП-языком» в блогосфере, вот еще один для вас.
И короткий ответ: «Да, но это не имеет значения».
Однако я постараюсь не зацикливаться на терминологии и академических определениях, а сосредоточусь на том, как мы это делаем.
Этот в Го.
Что такое ООП?
Обычно вопрос об объектно-ориентированности Go возникает из пугающе популярного заблуждения о том, что «ООП-язык должен иметь классы», которых в Go, как мы знаем, нет. Чуть более глубокие мысли приводят спрашивающих и респондентов к формулировкам вроде «если язык поддерживает инкапсуляцию, полиморфизм и наследование, то это ООП», на что Алан Кей ( Алан Кей ), который, собственно, и придумал ООП, смотрит на это с нескрываемым непониманием.Рискну предположить, что для большинства читателей каноном ООП-языка является C++, о котором говорит сам Алан Кей.
говорит следующий:
Я придумал термин «объектно-ориентированный», и могу вам сказать, что я не имел в виду C++.(Видео, кстати, отличное, посмотрите, если еще не сделали.— Алан Кей, OOPSLA '97
) И сразу о чем имеется в виду ООП :
Для меня ООП означает только обмен сообщениями, локальное сохранение и защиту, сокрытие состояний-процессов и крайне позднее связывание всех вещей.В общем, если углубляться в тему, и не настаивать на том, что любимая книга по ООП самая правильная, то идея все же была в том, чтобы перенести опыт восприятия реального мира в модели разработки кода.
В мире существуют объекты, объекты имеют свойства и поведение, объекты могут взаимодействовать.
Точка.
В конце концов, именно так мы понимаем мир.
Все остальные определения и понятия, появившиеся позднее, являются лишь способами реализации этой простой концепции.
Go не любит позднее связывание, но любит обмен сообщениями, а концепция «свойств и поведения» объектов реализована прекрасно, что дает Go повод называть его отличным объектно-ориентированным языком.
Субъективно, после полутора лет работы с Go, наличие фундаментального разделения на «свойства» и «поведение» кажется наиболее естественным способом представления сущностей, и вы задаетесь вопросом, почему основные языки до этого не дошли ранее.
Классы с методами и свойствами в одной куче мне теперь искренне кажутся неудобными и старым возвратом.
ООП на примере
Возьмем какой-нибудь пример, близкий к жизни, вместо привычных Собаки и Животных) Например, вы бывший партнер Сноудена и пишете систему, которая отслеживает приватную информацию известных личностей :) Вам необходимо получить все сообщения, которые упоминаются фраза «если бы только бабушка».Сообщения могут быть голосовыми, Skype, электронной почтой, сообщениями Twitter или чем-то еще.
В классо-ориентированных языках мы, скорее всего, создадим класс MessageSource с виртуальным методом LookupWord(), который будет возвращать объекты класса Message. Чтобы работать, например, с Twitter или Skype, мы должны наследовать от MessageSource, реализовать LookupWord() и вызвать класс TwitterSource для Twitter и класс SkypeSource для Skype. Знакомо и понятно каждому, кто привык к занятиям.
В Go мы можем выразить это более прямолинейно — описывать свойства отдельно, поведение отдельно и использовать композицию вместо обычного наследования, которого в Go нет.
Структуры
Сначала опишем свойства — для этого создадим структуры, содержащие необходимые поля свойств объектов.Структуры в Go — основной способ создания собственных типов данных.
Теги: #golang #ООП #alan kay #alan kay #alan kay #alan kay #программирование #Gotype Message struct {
-
Требуется Много Ударов!
19 Oct, 24 -
Почему Стоит Выбрать Наушники Skullcandy
19 Oct, 24 -
Карта Киева (Метро) В Интернете
19 Oct, 24