6.18.2011

Python, Java e Smalltalk


Em high-tech ha os controles que implementamos como desde o Assembly, que aos anos vamos criando com pesquisas, nossas aspirações humanas assim as linguagens de programação cada vez mais aproximam com o mundo real. As ordens e controles que aplicamos a sistemas, com seus fluxos de ordem para salvar, escrever, desenhar, remover, adicionar, consultar informacoes  hoje em dia sao muito diferentes as ordens, mas a base e muito similar de programacao desde o inicio do UNIX e a arquitetura de implementação, o CORBA, o nosso velho e bom CORBA que deu origem a algumas arquiteturas de software como Enterprise Java Beans, esta falácia sobre SOA - Software Oriented Architecture, bem hoje as linguagens de programação copiam estas aspirações com o Pyhon, e outras linguagens como Java, C++, nosso inicio com linguagens Orientada a Objetos como SmallTalk que de alguma forma tem relacao de herança com o Python, Java, C++.
O Python merece espaço, enquanto a Google fica dando espaço, honra ao Java, nao que mereça, mas por que a Google nao coloca como padrão de desenvolvimento o Python, economizaria ações judiciais, e teria uma força mais independente, sem contar com os pythonistas iriam migrar para o Android...nao entendo a Google. A Nokia se junta com a Microsoft, na tentativa de "ressuscitar", a plataforma MS-Widows Mobile, isto e uma opinião minha.    
Alguns pontos práticos que gostaria de apresentar ...entre SmallTalk e Python...
Problema: cálculo de fatorial
def factorialRecursive(n):
  if n<0:return 0
  if n==0:return 1
  return n*factorialRecursive(n-1)
Ou assim:
def factorialNonRecursive(n):
  if n<0:return 0
  return reduce(lambda a,b:a*b,[1]+range(1,n+1))
A recursividade pode parecer uma solução elegante, mas o consumo de memória é assombroso nesse caso, em qualquer linguagem.
Calcular a fatorial de um número grande qualquer pode ser um problema com a recursividade. Por isso, prefira a versão não recursiva.
No novo Python 2.5 você pode fazer:
def fact(x): return (
  0 if x<0 else
  reduce(lambda a,b:a*b,[1]+range(1,x+1))
)
Aqui é difícil dizer qual é mais prática, Smalltalk ou Python. Você pode palpitar sobre qual é mais elegante, uma vez que as soluções são radicalmente diferentes, mas a escolha final é subjetiva.
Problema: imprimir os números de 1 a 10
Eu faria usando os recursos de programação funcional:
print "\n".join(map(str,range(1,11)))
Mas você pode preferir:
for i in range(1,11):
  print i
De qualquer maneira, ponto para o Python aqui.
Problema: trabalhando com Collections
l=[
  'Em Python,',
  'denominamos as',
  'collections',
  'de "listas"',
]
print "\n".join(l)
Aqui, indiscutivelmente, ponto para o Python.
Problema: mostrar os pares e ímpares entre 1 e 10
for i in range(1,11):
  print i,["is even","is odd"][i % 2]
Percebemos novamente, o Python ganha disparado.
Problema: invocar um método via Reflection
É bem fácil:
o=MyClass()
getattr(o,"showMessage")()


Aqui o páreo é duro, Python e Smalltalk correm cabeça-a-cabeça.
Na minha opinição, Python ganha por uma leve diferença.

* CORBACommon Object Request Broker Architecture
* O que o mercado ecoa hoje pode-se dizer que o CORBA tem parcela de porque da existência


Acessem  se quiser, estas tecnologias abaixo tem relação com o CORBA



  • Sun RPC — RPC para as plataformas Unix e Linux
  • DCOM — RPC para Windows
  • RMI — RPC para Java
  • Object Transaction Service
  • SOAP — padrão RPC para web service
  • RESTFul Web Services

No comments: