Голанг И Ооп

Если вам недостаточно постов на тему «является ли 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 — основной способ создания собственных типов данных.

   

type Message struct {

Теги: #golang #ООП #alan kay #alan kay #alan kay #alan kay #программирование #Go
Вместе с данным постом часто просматривают: