ООП vs. ФП
От: C.A.B LinkedIn
Дата: 14.04.13 13:24
Оценка:
Кажется, сегодня я понял почему ФП это ООП для бедных, и наоборот Но трейд не совсем об этом.

В ООП все методы распределены по объектам, там-же находятся и данные. В ФП функции(а так-же процедуры в ПП) и данные существуют отдельно, к тому-же функции могут быть разбросаны по программе как угодно(не считая ограничений вносимых областями видимости имён).

Пример на Scala(с ошибками и который можно переписать проще):
   class T(t:Int) extends Int{
     val v = if(t > 100) 100 else t
     def size():Int = 100
     def add(a:T):T = {val s = a + v; (if(s > 100) 100 else s).asInstanceOf[T]}
     overrid def toString():String = v + "%"
   }
   class Main{
     def main(){
       val t = new T(1)
       val sz = t.size 
       val sm = t add new T(2)
       println(  sz + "," + sm  )
     }
   }

Пример на функционально-императивный ЯП, который я сейчас пилю:
   T DATA 0..100                                                        //Примитивный(как например int,boolean в Java) тип данных, заданный в виде диапазона.
   //
   T>Int = {t) t #> Int (}:Typecast                                     //Несколько тайпкастов для типа "T", чтоб не захламлять код явными приведениями.  
   Int>T = {i) (if i > 100 => 100 else => i) #> T (}:Typecast           //"#>" - оператор преобразования типов, как в Паскале.         
   T>Str = {t) t:Int:Str + "%" (}:Typecast     
   //
   size = {T) 100 (Int}                                                 //Функция "size"
   + = {a:T,b:T) a:Int + b:Int (T}                                      //Функция "+" 
   //
   t = 1:T                                                              //Определение значения типа T.
   sz = t.size()                                                        //Сахар для: sz = size(t) 
   sm = t + 2:T                                                         //Сахар для: sm = +(t,2:T) 
   print(  sz + "," + sm  )

Сей ЯП ориентирован на быстрое написание несложных, небольших программ (как Python). В данном контексте, думаю такой, гибридный ЯП будет лучшим выбором чем ООЯП, так как он несколько проще и гибче. Во первых — здесь данные и функции разделены, что будет проще для понимания людьми не знакомыми с ОО парадигмой (типа "вот у нас циферки и буковки, а вот у нас команды которые чего-то с ними делают"). Во вторых — не нужно особо структурировать программу, т.е. распределять функции и данные по классам, "пишем где удобно". Ну и в третьих — чтобы добавить какие-то новые методы для работы некоторым типом не нужно расширять класс, можно просто определить эти методы там где они нужны.

Собственно вопрос: Как вы считаете, верен ли мой выбор? Почему?

Спасибо.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.