Ir para conteúdo

POWERED BY:

Arquivado

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

JoaoGusmao

Para que realmente é utilizada a orientacao a objetos?

Recommended Posts

Estou a algum tempo no php, e queria aprender POO. o problema é que não adianta ler todo esse mund de artigoa, se eu nao entendo porque usar a orientaçao a objetos para programar.

Tenho um site de pedidos online, que programei arquivo por arquivo separadamente, sendo que a medida que eu preciasava, ia escrevendo.

Alguém sabe me dar informaçoes de por onde começar? pq ate hje nao entendi o real objetivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

um ponto q o pessoal fala mto é a reutilização de codigo, organização e encapsulamento.

 

por exemplo pense q você tem varias funções para manipular o banco sem usar uma variavel global pra isso, nesse exemplo

 

function conectar(){
 $db = new PDO('driver:user password host dbname');
 return $db;
}

function insert($db,$valores){
 ...
}

function update($db,$valores){
 ...
}

 

qual o problema nisso? ficar passando uma conexão td hora pra alguma dessas operações, no caso de uma classe a varivel $db seria uma atributo q seria compartilhado com td a classe

 

class dbClass{
private $db;

public function dbClass(){
  $this->db = new PDO('...');
}

public function insert($valores){
  $sql= "INSERT INTO...";
  $stmt = $this->db->prepare($sql);
  $stmt->execute();
}

public function listar(){
  $sql = '...';
  $stmt = $this->db->prepare($sql);
  $stmt->execute();
  $result = $stmt->fetch(PDO::FETCH_ASSOC);
  return $result
}

}

 

OO ajuda a organizar melhor o codigo coisa q algumas vezes é dificil fazer com funções. :P, você tbm pode definir uma classe abstrata ou interface... para definir padrões de chamadas de metodos(agrupar itens comuns) e fazer uma classe concreta herdar/implementar elas....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda fiquei sem entender..

Acho que tenho algum retardo mental rsrsrs

Fiquei sem entender ainda...

vamos supor que tenho um código que faz uma conexão no banco:

$host = "localhost";
$user = "root";
$senha = "senha";
$dbname = "DB";
$conexao = mysql_connect($host, $user, $senha) or die("Usuario e senhas nao conferem");
mysql_select_db($dbname;

 

Uma consulta:

$sql = mysql_query("SELECT * FROM tabela where post_autor = 'Joao'");
$linhas = mysql_fetch_array($sql);
$texto = $linhas['texto'];

 

E uma DIV que mostra o resultado da consulta:

<div id="blabla">
   <p><?php echo $texto; ?></p>
</div>

 

Como isso ficaria em POO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem ma centena de respostas pra essa sua duvida =X

 

usando OO e outros paradigmas a parte no meu caso fica assim ^^

 

mysql.php

 

 

class Db_Adapter_Mysql implements Db_Adapter_Interface {

   public static function openConn($config) {

           try {
               $dns = $config['adapter'] . ":host=" . $config['host'] . ";dbname=" . $config['dbname'];

              return new PDO($dns, $config['user'], $config['pass']);
           } catch (PDOException $error) {
               LogsRegister_Log::registerLog($error->getMessage());
               die('Erro Conexão não pode ser aberta: Verifique log do sistema');
           }
   }

}

interface.php
interface Db_Adapter_Interface{

public static function openConn($config);
}

 

 

 

connection.php

 

 

class Db_Connections {

   public static function factory($config) {
       switch ($config['adapter']) {
           case 'mysql':
               return Db_Adapter_Mysql::openConn($config);
               break;
       }
   }
}

}

 

 

 

register.php

 

 


class registry_Registry {
       /**
        * Instância única de Registry
        * @var Registry
        */
       private static $instance;

       /**
        * Nosso registro
        * @var ArrayObject
        */
       private $storage;

       /**
        * Registry é um caso de uso de Singleton
        */
       protected function __construct() {
               $this->storage = new \ArrayObject();//armqzena array objetos
       }

       /**
        * Recupera um registro utilizando sua chave
        * @param string $key
        * @return mixed O valor armazenado
        * @throws RuntimeException Se não houver um registro para a chave especificada
        */
       public function get( $key ) {
               if ( $this->storage->offsetExists( $key ) ) {
                       return $this->storage->offsetGet( $key );
               } else {
                       throw new RuntimeException( sprintf( 'Não existe um registro para a chave "%s".' , $key ) );
               }
       }

       /**
        * Recupera a instância única de Registry
        * @return Registry
        */
       public static function getInstance() {
               if ( !self::$instance )
                       self::$instance = new registry_Registry();

               return self::$instance;
       }

       /**
        * Registra um valor à uma chave
        * @param string $key A chave que será utilizada no registro
        * @param mixed $value O valor que será registrado
        * @throws LogicException Se a chave já estiver registrada
        */
       public function set( $key , $value ) {
               if ( !$this->storage->offsetExists( $key ) ) {
                       $this->storage->offsetSet( $key , $value );
               } else {
                       throw new LogicException( sprintf( 'Já existe um registro para a chave "%s".' , $key ) );
               }
       }

       /**
        * Remove o registro de uma chave específica
        * @param string $key A chave que será removida
        * @throws RuntimeException Se não houver um registro para a chave especificada
        */
       public function unregister( $key ) {
               if ( $this->storage->offsetExists( $key ) ) {
                       $this->storage->offsetUnset( $key );
               } else {
                       throw new RuntimeException( sprintf( 'Não existe um registro para a chave "%s".' , $key ) );
               }
       }
}

 

 

forma simples de uso

$config['adapter'] = 'mysql';
$config['dbname']= 'testes';
$config['host'] = 'localhost';
$config['user'] = 'root';
$config['pass'] = '';

$reg = registry_Registry::getInstance();
$reg->set('Conexao',  Db_Connections::factory($config));

// em outra prte do seu codigo //OO teria muita abstracao envolvida nisso..

$conn = registry_Registry::getInstance()->get('Conexao');

$dados = $conn->query("SELECT * FROM table")->fetchAll();

var_dump($dados);

Compartilhar este post


Link para o post
Compartilhar em outros sites

a orientacao objetos visa abstrair o mundo real para a programacao, pois se viu q determinadas tarefas nao sao repetitivas, rotinas como na programacao estruturada, trazendo assim uma nova filosofia...

 

claro, q traz algumas vantagens

reutilizacao de codigo

sistema integrado

 

imagina um carro, carro serve pra q? pra uma locomocao rapida

 

agora iamgina um carro e seus diversos componentes, cada componentes com suas acoes e caracteristicas distintas, mesmo q um carro utilize 4 velas, elas estao em posicoes diferentes (ainda se fabrica carro q usa velas?)

 

você ve um carro e ve uma integracao, nao imagina q componentes tem ali ou como funcionam...

 

claro q traz tb alguns problemas, dae vem os design patterns q vem resolver esses problemas

 

no estruturado nao tem isto, o estruturado sao pra tarefas repetitivas, rotinas...

 

Boa tarde,

 

Em suma, ela serve para transpor problemas encontrados na programação procedural, principalmente para sistemas de grande porte.

 

Consegue imaginar um facebook da vida sem isso?

 

É, chega a dar calafrios !

 

Clique aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmmm...

 

Programar orientado a objeto, na prática, não muda a sua programação. O que muda de verdade é a forma de pensar, como resolver os problemas.

 

É mais fácil pensar na resolução dos problemas em OO quando você precisa programar para outras pessoas, em equipe. Quando você precisa validar o que os outros programadores fizeram ou deixaram de fazer, quando parte do requisito do seu sistema precisa ser modificado, quando uma parte do programa só pode ser acessada seguindo determinadas regras, dentre outras coisas que você pode ter uma percepção melhor quando em equipe.

 

Leitura recomendada:

Orientação a Objetos, por Dalai Lama – parte 1

Orientação a Objetos, por Dalai Lama – parte 1.5

 

Outra leitura, essa mais acadêmica:

http://www.caelum.com.br/download/caelum-java-objetos-fj11.pdf (capítulo 4)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas respostas...

mais acabou que ninguém tentou "traduzir" aquele código que eu passei kkkkkk

Eu acho que está faltando exemplos para eu testar.

Alguém se habilita??

 

a oo em muito mais complexa do q o procedural, tem varios conceitos, regras e formas de fazer determinadas coisas....o procedural você faz emf orma de lista, em passo a passo, o OO nao acontece em passo a passo....por isso se tornaria impraticavel (pelo menos ao momento) postar algo assim....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pelas respostas...

mais acabou que ninguém tentou "traduzir" aquele código que eu passei kkkkkk

Eu acho que está faltando exemplos para eu testar.

Alguém se habilita??

eu me habilitei =X

 

ta ae

http://forum.imasters.com.br/topic/460955-para-que-realmente-e-utilizada-a-orientacao-a-objetos/page__view__findpost__p__1825605

Compartilhar este post


Link para o post
Compartilhar em outros sites

A orientação a objeto torna prática a tarefa de programar. Torna o seu código mais organizado, de mais fácil leitura e estudo, torna seu sistema mais facilmente escalável (a implementação de novas funcionalidades sem que vire uma bagunça ilegível), aumenta a sua segurança, pois torna mais restrito o acesso direto a variáveis que no PHP poderiam ter facilmente valores atribuidos via url, por exemplo.

 

Uma vez familiarizado com os conceitos e práticas, não consigo pensar em desvantagens no desenvolvimento orientado a objetos. Não sou expert no assunto, mas com a experiência de um aprendiz posso dizer que não vai se arrepender em se aprofundar nesse conceito...Quando colocar em prática, então...

 

Vai que vai, camarada! =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fui apresentado ao php OO e comecei a desenvolver nessa direção. Vim ter contato com programação de códigos estruturados aqi no Fórum. Estou ralando um pouco pra entender os códigos da galera rs

 

aqui vai minha opnião:

Eu diria que se ja programa de forma estrutural, pelo que li em alguns artigos buscando compreender melhor, é bem importante por se deparar com os limites que a linguagem (php estruturado) pode proporcionar.

 

Agora, trabalhar com orientação à objetos te poupa tempo e esforço, às vezes é difícil abstrair certas coisas com o nível de generalização ideal, mas vale à pena porque o seu código fica limpo e reutilizável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai meu deus...

To lendo agora um artigo de não sei quantas partes escrito pelo João Batista Neto...

 

Como já disse, tenho um site em php, e queria saber: Seria muito difícil "transformar" esse site em OOP, tendo em vista que esse site tem aproximadamente 200 arquivos?? *-* (Dá até dor de cabeça de pensar)

Compartilhar este post


Link para o post
Compartilhar em outros sites
Como já disse, tenho um site em php, e queria saber: Seria muito difícil "transformar" esse site em OOP, tendo em vista que esse site tem aproximadamente 200 arquivos?? *-* (Dá até dor de cabeça de pensar)

 

Por qual motivo você quer modificar seu site?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque dizem ai que é melhor, e de fato, percebi que é...

 

Outra pergunta:

Estou fazendo um sistema de notificações, e em várias partes do site, vou inserir códigos somente com mudanças em uma variável. Esse código, vai inserir uma notificação no DB.

Isso seria como em OOP?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque dizem ai que é melhor, e de fato, percebi que é...

 

Outra pergunta:

Estou fazendo um sistema de notificações, e em várias partes do site, vou inserir códigos somente com mudanças em uma variável. Esse código, vai inserir uma notificação no DB.

Isso seria como em OOP?

 

Isso me lembrou o que um amigo meu vive falando:

"A forma OO te permite ter um código mais "elegante" e bem controlado. Vale a pena, principalmente para projetos grandes, já que modulariza a aplicação e permite reaproveitar ideias e código (um cliente é um cliente em qualquer parte do sistema desenvolvido em OO, então os dados que você pode obter são os mesmo sempre que tem um objeto cliente)."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes de tomar essa decisão você tem de ponderar quanta manutenção a nível de codificação você presta à esse site.

 

Se você está constantemente codificando novos recursos e/ou na hora de corrigir problemas você demora demais, seu sistema é um excelente candidato à cirurgia.

 

Se você mexe uma vez ou outra, corrige um bug aqui outro ali, rapidinho, não vale o esforço.

 

O principal ponto é que se você esperar demais, vai acabar desenvolvendo outros sistemas proceduralmente e, dentre esses sistemas um ou outro pode fazer você responder SIM à(s) questão(ões) acima.

 

E quando isso acontecer, você vai querer desesperadamente aprender, e Orientação a Objetos não é uma coisa fácil ou simples. Você pode levar seis meses como pode levar seis anos.

 

Vai deixar seu cliente na mão tanto tempo assim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor para quem? Como o Erick explicou... Realmente é melhor, principalmente para o programador.

Se o sistema já esta pronto não vejo motivo para modificar, o melhor que tens a fazer é estudar para usar poo nos seus próximos projetos. (é o que eu estou fazendo)

Eu estou reescrevendo algumas aplicações que criei para poder usar a biblioteca GTK, daí não tem jeito, tem que ser POO mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem...

Para começar, o site é meu, portanto não tenho um cliente (tipo, o cara que recebe os arquivos do site).

Quem vai "anunciar" no site serão estabelecimentos cadastrados.

Considero o site pronto, porém estou constantemente adicionando recursos para melhora-lo.

Uma vez ou outra tenho que upar o site para o servidor todo de novo pq modifico muitos arquivos, e depois nao dá para ter uma noção de qual eu mexi :P

Taí um dos motivos para que eu quero aprender. Meu site anda MUITO desorganizado.

Para o usuário, não é bagunçado, mas para min, é.

O que farei agora, é aprender OOP e ir fazendo aplicações de testes.

Alguém pode sugerir algum projeto que eu possa desenvolver, que faz muito o uso de OOP só para eu treinar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para organização OO vai ajudar e muito... outra coisa que ajuda é um controle de versionamento (isto desde agora).

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.