Me parece que el cuadro no está del todo bien.
Dejo algunos comentarios:
Objetos es imperativo. Smalltalk es Fuertemente Tipado, pero con chequeo dinámico de tipos.
Todo lo que pusiste en la fila Expresividad. Listas por comprensión? Delegación de responsabilidades, encapsulamiento?
Ninguno de esos conceptos van atados a la expresividad. Ejemplos:
f a l = [ a x | x <- l ]
Ahí hay una lista por comprensión. Te parece expresiva?
Lo mismo puede decirse en Smalltalk:
#A>>m1: p
p n > n ifTrue:[ ^ n ] ifFalse:[ ^p n ]
Lo mismo. Está encapsulado el comportamiento del método, pero de expresivo tiene poco.
La expresividad tiene que ver con el "que tanto mi abuela puede entender lo que hace el código sin saber programar".
En objetos puede darse recursividad también:
#SmallInteger>>fibonacci
| num1 num2 resultado |
self<0 ifTrue: [self error: 'No se puede realizar la recursion sobre numeros negativos'].
self<2 ifTrue: [^1].
num1 := (self - 1) fibonacci.
num2 := (self - 2) fibonacci.
resultado := num1 + num2.
^resultado
No digo que sea común (al menos no en smalltalk), pero no significa que no haya.
Lo que pusiste en particularidad de objetos no es exclusivo del paradigma sino que es una buena práctica en los 3 paradigmas. Va mas [/code]ligado a la declaratividad.
Yo hubiera puesto "Bloques", ya que es la representación objetosa de una lambda, y depende de quien te corrija puede ser lo que le da orden superior a smalltalk
Bueno, nada. Ya rendiste y ya está, pero tal vez le sirva a algún otro que quiera rendir mañana