Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Kakashi_Hatake

Programar para uma linguagem ou para várias ?

Recommended Posts

A dúvida é a seguinte.

 

Qual seria a melhor forma de programar ?

1- Criando códigos sem utilizar funções/métodos expecíficos de uma dada linguagem ?

2- Utilizar funções/métodos expecíficos que só um programador desta linguagem entenda ?

 

Exemplo 1

 

No primeiro caso, apenas um programador PHP sabe o que está acontecendo, caso seja necessário passar este código para JAVA por exemplo, um programador JAVA teria dificuldades em entender o que está acontecendo, teria que estudar um pouco de PHP.

 

 

<?php

/**
*  Client
*/
abstract class Client
{
   protected $storage;

   public function setName( $name )
   {
       $this->storage[ 'name' ] = $name;
   }
   public function getName( )
   {
       return $this->storage[ 'name' ];
   }
}
class User extends Client
{
   public function setLogin( $login )
   {
       $this->storage[ 'login' ] = $login;
   }
   public function getLogin( )
   {
       return $this->storage[ 'login' ];
   }
}
/**
*  Decoradores
*/
abstract class ClientDecorator extends Client
{
   protected $Client;

   public function __construct( Client $Client )
   {
       $this->Client = $Client;
   }

public function setName( $name )
   {
       $this->Client->setName( $name );
   }
   public function getName( )
   {
       return $this->Client->getName( );
   }

   public function __call( $method, $args )
   {
if( method_exists( $this->Client, $method ) )
{
    return call_user_func_array( array( $this->Client,$method ),$args );
}
else
{
    if( $this->Client instanceof self )
    {
	return $this->Client->__call( $method,$args );
    }
    else
    {
	throw new Exception( sprintf( 'Method %s not found', $method ) );
    }
}
   }
}
class Moderator extends ClientDecorator
{
   public function acceptComment( $commentID )
   {
       printf( 'Comment #%s was published!', $commentID );
   }

}
class Admin extends ClientDecorator
{
   public function sendUserToHell( $userID )
   {
       printf( 'User #%s is now burning with the devil...', $userID );
   }
}

 

 

 

Exemplo 2

 

No segundo caso, o mesmo programador JAVA teria facilidade em passar este código para linguagem JAVA, só que também o programador PHP tem que escrever bem mais códigos ao meu ver desnecessários.

 

 

<?php

/**
*  Client
*/
abstract class Client
{
   protected $storage;
   public function setName( $name )
   {
       $this->storage[ 'name' ] = $name;
   }
   public function getName( )
   {
       return $this->storage[ 'name' ];
   }
}
class User extends Client
{
   public function setLogin( $login )
   {
       $this->storage[ 'login' ] = $login;
   }
   public function getLogin( )
   {
       return $this->storage[ 'login' ];
   }
}
/**
*  Decoradores
*/
abstract class ClientDecorator extends Client
{
   protected $Client;
   public function __construct( Client $Client )
   {
       $this->Client = $Client;
   }
   public function setName( $name )
   {
       $this->Client->setName( $name );
   }
   public function getName( )
   {
       return $this->Client->getName( );
   }
}
class Moderator extends ClientDecorator
{
   public function setLogin( $login )
   {
       $this->Client->setLogin( $login );
   }
   public function getLogin( )
   {
       return $this->Client->getLogin( );
   }
   public function acceptComment( $commentID )
   {
       printf( 'Comment #%s was published!', $commentID );
   }

}
class Admin extends ClientDecorator
{
   public function setLogin( $login )
   {
       $this->Client->setLogin( $login );
   }
   public function getLogin( )
   {
       return $this->Client->getLogin( );
   }
   public function acceptComment( $commentID )
   {
       $this->Client->acceptComment( $commentID );
   }
   public function sendUserToHell( $userID )
   {
       printf( 'User #%s is now burning with the devil...', $userID );
   }
}

 

 

 

 

Ps. Os exemplos são meramente para ilustrar minha dúvida. Usei JAVA como exemplo, mas poderia ser qualquer outra linguagem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual seria a melhor forma de programar ?

1- Criando códigos sem utilizar funções/métodos expecíficos de uma dada linguagem ?

Depende da situação, você não consegue resolver TODOS os seus problemas sem usar algum recurso da linguagem, não acha ?

 

2- Utilizar funções/métodos expecíficos que só um programador desta linguagem entenda ?

Qual a necessidade disso ? não entendi a razão da pergunta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

2- Utilizar funções/métodos expecíficos que só um programador desta linguagem entenda ?

Qual a necessidade disso ? não entendi a razão da pergunta.

 

Um exemplo seria os métodos mágicos.

 

Não tenho tanta intimidade com outras linguagens, mas acredito que apenas o PHP tenha tais métodos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

__construct tb é método mágico, então se você quer escrever "em java" deveria fazer:

 

 

abstract class ClientDecorator extends Client
{
   protected $Client;
   public function ClientDecorator( Client $Client )

o método construtor com o mesmo nome da class

 

 

os métodos mágicos do php, violam algumas regras da programação OO, e atrapalham bastante a leitura do código.

Pois é como você disse: algum programador que não saiba php, pode se perder.

 

 

Na minha opinião, linguagens são apenas ferramentas. Devemos usar o melhor de cada uma, mas não deixando de lado as boas práticas de programação.

Preze a manutenção, e pense na tua equipe. Assim como o teu próprio aprendizado, pois se você precisar mudar de linguagem ? ai tudo oq você sabe é só php ?

 

não se prenda, não se limite.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um exemplo seria os métodos mágicos.

 

Quanto aos métodos mágicos, veja só:

 

Quando você achar necessário escrever um comentário, primeiro tente reescrever o código para que qualquer comentário fique supérfluo.

 

Mesmo programadores PHP teriam dificuldade em ler código que utiliza esses métodos mágicos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hi.

 

A boa prática em si é seguir os padrões. Não é a toa que existem os design patterns para soluções. Mas deixo claro que há exceções.

No caso dos métodos mágicos, não é uma boa usar. Eles tornam o desenvolvimento mais fácil, mas se houver problema, não espere que a manutenção seja fácil. Em especial, os métodos autoload, get e set. Além da perda de performance que é muito grande em relação a paths completos.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.