[#] Elixir: Как выглядит ООП в функциональном языке?
habrabot(difrex,1) — All
2016-08-15 15:30:03


В последнее время участились статьи и обсуждения на тему прощания с ООП и поиски смысла, который Алан Кэй изначально вкладывал в это понятие.

**Несколько высказываний Кэя для тех, кто пропустил**
> I made up the term “object-oriented”, and I can tell you I didn't have C++ in mind

> OOP to me means only messaging, local retention and protection and hiding of state-process, and extreme late-binding of all things.

> I’m sorry that I long ago coined the term “objects” for this topic because it gets many people to focus on the lesser idea. The big idea is “messaging”.

> The key in making great and growable systems is much more to design how its modules communicate rather than what their internal properties and behaviors should be.

> Late binding allows ideas learned late in project development to be reformulated into the project with exponentially less effort than traditional early binding systems (C, C++, Java, etc.)

> I’m not against types, but I don’t know of any type systems that aren’t a complete pain, so I still like dynamic typing.

В связи с этими обсуждениями, часто всплывает мысль о том, что Erlang/Elixir очень хорошо удовлетворяют критериям, которые Кэй предъявлял к понятию «объектно-ориентированный». Но далеко не все знакомы с этими языками, поэтому возникает непонимание как функциональные языки могут быть более объектно-ориентированными, чем популярные C++, Java, C#.

В этой статье я хочу на простом примере с [exercism.io][1] показать как выглядит ООП на Elixir.

**Описание задачи**
Напишите небольшую программу, который хранит имена школьников, сгруппированные по номеру класса, в котором они учатся.

В конце концов, вы должны быть в состоянии:

* Добавить имя школьника в класс
* Получить список всех школьников, обучающихся в классе
* Получить отсортированный список всех учащихся во всех классах. Классы должны быть отсортированы по возрастанию (1, 2, 3 и т.д.), а имена школьников — по алфавиту.

[Читать дальше →][2]

[1]: http://exercism.io/exercises/ruby/grade-school/readme
[2]: https://habrahabr.ru/post/307720/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut