Ir para conteúdo

Arquivado

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

Juliano amadeu

Como pensar em Orientação a Objetos

Recommended Posts

Bom, como já comecei o projeto de outra maneira (bem mais simplista) vou finalizar dessa forma (tenho prazo curtíssimo),

 

Bom, o repositório no github foi criado e, se o pessoal animar, vamos prosseguir com o desenvolvimento. Acredito que o conhecimento que será compartilhado no decorrer do desenvolvimento será maior que o próprio projeto.

 

O repositório está em: https://github.com/iMastersDev/iMasters-Form

 

Para fazer o clone:

git clone git://github.com/iMastersDev/iMasters-Form.git

 

Eu tenho uma série de classes que fazem o tratamento da string SQL e retornam o resultado. Faço uma composição/agregação entre a classe SQL e a classe interview para resgatar as perguntas?

 

Primeiro, esqueça SQL. Faça com que sua camada de negócios trabalhe com as entidades, popular os dados manualmente nesse momento pode ser interessante, dessa forma você saberá, com certeza, que sua aplicação não depende de uma base específica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@JCMais, Já tentei diversos tutoriais, mas nunca entendi pra valer como funciona o versionamento. No passado eu até tentei usar o SVN, mesmo tendo lido que o GIT era mais eficaz.

 

Mas nunca entendi nem um nem outro. Material detalhado tem aos montes, mas falta aquele que simplifica a didática, dimunuindo o excesso de "techniquês".

Compartilhar este post


Link para o post
Compartilhar em outros sites

:seta: Algum front-end developer se habilita a nos ajudar no desenvolvimento das Views?

 

:seta:

 

Conta comigo. \m/

 

Frontend. Do backend eu quero participar só das discussões. :grin:

 

-

 

Bom, o repositório no github foi criado e, se o pessoal animar, vamos prosseguir com o desenvolvimento. Acredito que o conhecimento que será compartilhado no decorrer do desenvolvimento será maior que o próprio projeto.

 

O repositório está em: https://github.com/iMastersDev/iMasters-Form

 

Para fazer o clone:

git clone git://github.com/iMastersDev/iMasters-Form.git

 

Como irá ser a estrutura das pastas? Poderia ser algo assim:

app/
   modules/
   library/
public/
   assets/
       js/
       img/
       css/

 

?

 

-

 

@Bruno, você pode aprender em um projeto real. =)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como irá ser a estrutura das pastas?

 

Isso não é importante, não ainda.

 

@Bruno, você pode aprender em um projeto real. =)

 

#fato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sou mais fã do backend, até por me julgar mais competente nessa parte.

Exemplo: eu conheço bem Javascript, mas até hoje meus 'action.js' são um bando de funções chamadas dentro do evento de carregamento da página.

Também não sei muito bem como utilizar o Git, mas se os colegas se dispuserem a dar uma mão para mim e para o Bruno Augusto, eu topo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ufa! Ainda bem que ou o único. :P

 

@Bruno, você pode aprender em um projeto real. =)

 

#fato

Possível sim, certeza não. E se é incerto, é subjetivo. Se é subjetivo, é duvidoso e fatos não são duvidosos.

 

A possibilidade sim é um fato. Posso até aprender, mas como sem ter o MÍNIMO de conhecimento para saber versionar, enviar uma modificação, receber outras feitas e etc.

 

Sempre quis aprender, mas nunca consegui. Até hoje o meu versionamento é feito na base da duplicação. Duplico, programo, programo, programo e testo. Funcionou? beleza, apago a cópia e continuo a partir dessa.

 

Na verdade, me surpreende que ninguém ainda tenha resolvido criar um tutorial definitivo de uso do GIT.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia, Amigos.

 

Estou acompanhando o post a alguns dias, e estou maravilhado com as aulas sobre OOP e DP do Mestre João! A parte sobre MVC é simplesmente bem mais fácil de compreender do que muita coisa que já li até hoje.

 

Enfim, vim colaborar um pouco, vi a dúvida de alguns amigos sobre o uso do git e do github, e me lembrei de um post do Fábio Vedovelli a algum tempo atrás, indico o material para quem quer tentar entrar no versionamento.

 

O link para o post dele: http://blog.vedovelli.com.br/?p=1871

 

 

Forte abraço a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei que parece estranho, mas a idéia da OO é representar um objeto com suas caracteristicas e funções, por isso não se concentre no codigo ou db, mas nas caraceteristicas q o objeto deve ter e as tarefas q ele deve desempenhar.

 

Ex:

class Usuario {
   // Estes são os atributos d usuario
   public nome;
   public email;
   protected nome_usuario;
   protected senha;

   // Estes sao os metodos
   public function cadastro(){
       // Codigo para cadastrar
   }

   public function login(){
       // Codigo para fazer login
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

class Usuario {
   // Estes são os atributos d usuario
   public nome;
   public email;
   protected nome_usuario;
   protected senha;

   // Estes sao os metodos
   public function cadastro(){
       // Codigo para cadastrar
   }

   public function login(){
       // Codigo para fazer login
   }
}

 

 

Ao meu ver, isso aí ainda pode ser melhorado.

Primeiro porque trabalhando com Entidades, elas devem ser apenas POPO (Plain Old Php Objects), e ter apenas metódos acessores para as propriedades que possuem. Movendo assim o código para login para uma classe Auth, e o de cadastro para uma action em determinado Controller.

 

Algo como:

class User {
   protected $username;
   protected $password;

   public function setUsername( $username )
   {
       $this->username = $username;
       return $this;
   }

   public function getUsername()
   {
       return $this->username;
   }

   public function setPassword( $password )
   {
       $this->password = $password;
       return $this;
   }

   public function getPassword()
   {
       return $this->password;
   }
}

class Auth {
   //...
   public function login( $username, $password )
   {
       //código para efetuar login
   }

   public function logout()
   {
       //código para efetuar logout
   }
}

class UserController {
   public function signupAction()
   {
       //código para montar um formulário, enviar ele para a view, receber os dados do volta e repassar para a Model
   }

   public function loginAction()
   {
       //monta um form para pegar o nome de usuário e senha, quando receber esses dados, usa a classe de serviço Auth para efetuar login
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

o pessoal mais experiente podi da o ponta-pe inicial =D

A questão não é experiência...

 

 

E você planeja ajudar em que parte? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na parte que me for possivel ^^

 

Tudo isso e novo pra mim, e pra muitos.. ^^

So que estou mais aqui pra aprende doque ajuda =(

eu num sei nd d MVC, DP e msm lendo aqui os post bem explicado.. Pra mim fica meio confuso tenta passa isso pro codigo..

 

Ja podia comeca a defini O que vai se preciso.. pelo que vi, a class do JN seria a Model....

 

Mais e o resto???? pelo que vi o JN quer q a galera faca isso! ele ja deixo claro oq e MVC, ta na hr de aplica o conceito no projeto! Na pratica....

 

queria te mais conhecimento pra da minha cara a tapa e posta umas ideias (mais fica pra uma proxima kkkk) =X

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que o essencial antes de sair escrevendo código é definir a modelagem da aplicação.

 

Tanto o UML, como o MER (acho que vi alguém postando um modelo de banco nesse post).

 

Enfim, posso ajudar tanto no back como front-end, no que eu souber, e talvez no que não souber (google) :-)

 

Abraços !

Compartilhar este post


Link para o post
Compartilhar em outros sites

AINDA não tenho base suficiente pra ajudar no back-end. Preciso compreender melhor algumas coisas relacionadas a oop / mvc e outros padrões.

 

Quanto ao front-end podem contar comigo seja design, html, css, js,etc, só preciso saber melhor o que será feito nesse projeto.

 

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pó pessoal, se eu entedi bem o que o JB postou, o projeto é para aprender.

Não é porque você não sabe algo que vai ser utilizando em determinada parte do projeto que você não deve participar dessa parte especifica, pelo contrário, pode ser que participando, você consiga aprender aquilo que entrou no projeto não sabendo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim, imagino que nem deve ter algo de muito sofisticado no front-end por isso mesmo.

 

 

Vai ser uma aula de programação isso ae! auhauhua

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu proponho não colocar a carroça na frente dos bois.

 

Já que, erroneamente, vivem dizendo que eu não sei o que é OOP apenas porque não entendo direito sobre os Padrões de Projetos e alguns princípios da Orientação a Objetos, por quê usar o que pessoas, assim como eu, confesso, não sabem usar, acham que sabem ou sabem muito pouco?

 

Diagramas de Modelagem e GIT são dois exemplos. Eu tenho dificuldade em entender esses diagramas. Assim como eu, outras pessoas também o têm ou podem ter.

 

Como que elas (e eu) aprenderão(ei) sobre um Padrão de Projeto se 98% das vezes eles são explicados através desses diagramas?

 

Se a pessoa não entende um Diagrama, vai simplesmente ignorá-lo e perguntas que para uns que entendem da modelagem poderão parecer estúpidas, servirão apenas para constranger quem quer aprender.

 

GIT é outra história, vou tentar botar pra funcionar, tanto no PC quanto na minha cabeça. :P

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como que elas (e eu) aprenderão(ei) sobre um Padrão de Projeto se 98% das vezes eles são explicados através desses diagramas?

 

Se a pessoa não entende um Diagrama, vai simplesmente ignorá-lo e perguntas que para uns que entendem da modelagem poderão parecer estúpidas, servirão apenas para constranger quem quer aprender.

 

Não entendo como alguém pode se sentir constrangido por querer aprender, ninguém nasce sabendo, EU pelo menos não nasci sabendo.

 

:seta: Se existe a oportunidade de se perguntar, pergunte!

 

Os diagramas utilizados nas representações estruturais dos padrões de design, muitas vezes são feitos utilizando os disgramas de classe especificados pela UML. A ideia dos diagramas de classe é mostrar os participantes e seus relacionamentos, veja só:

 

gallery_94216_5_938.png

 

O bloco quadrado ai em cima representa uma classe, ela pode ser concreta ou abstrata. A diferença entre os participantes concretos e abstratos está na forma que o nome do participante está escrito, por exemplo:

 

gallery_94216_5_48.png

 

Como pode ver, BrunoAugusto é um participante concreto, enquanto ForumMember é um participante abstrato e está escrito em itálico. O código que representa esses dois participantes, em PHP, é assim:

 

BrunoAugusto.php

<?php
class BrunoAugusto {
}

 

ForumMember.php

<?php
abstract class ForumMember {
}

 

Além de classes abstratas, podemos representar interfaces no diagrama também:

 

gallery_94216_5_245.png

 

O <<interface>> identifica claramente esse participante. Usamos a notação de classe (o quadrado acima) para representar uma interface em um diagrama, quando o uso de algum dos métodos dela é relevante. Se não for tão relevante, podemos utilizar uma bolinha:

 

gallery_94216_5_1377.png

 

O código PHP que representa essas duas interfaces é:

 

List.php

<?php
interface List {
}

 

OtherInterface.php

<?php
interface OtherInterface {
}

 

Classes podem ter membros, como propriedades ou métodos:

 

gallery_94216_5_3200.png

 

Os sinais - e # são utilizados para representar a visibilidade de um membro, no caso -propriedadePrivada representa uma propriedade com visibilidade private, veja:

 

UmaClasse.php

<?php 
class UmaClasse {
/**
	* @var	string
	*/
public $propriedadePublica;

/**
	* @var	string
	*/
private $propriedadePrivada;

/**
	* @var	string
	*/
protected $propriedadeProtegida;
}

 

O mesmo ocorre com os métodos:

 

gallery_94216_5_4820.png

 

UmaClasse.php

<?php 
class UmaClasse {
/**
	* @var	string
	*/
public $propriedadePublica;

/**
	* @var	string
	*/
private $propriedadePrivada;

/**
	* @var	string
	*/
protected $propriedadeProtegida;

/**
	* @return	string
	*/
public function operacaoPublica() {
	return $this->propriedadePublica;
}

/**
	* @return	string
	*/
private function operacaoPrivada() {
	return $this->propriedadePrivada;
}

/**
	* @return	string
	*/
protected function operacaoProtegida() {
	return $this->propriedadeProtegida;
}
}

 

Quando precisamos generalizar um determinado participante, utilizamos uma seta com um triângulo na ponta:

 

gallery_94216_5_2174.png

 

Esse tipo de relacionamento chama-se IS A, ou É UM, o código que esse diagrama representa é:

 

<?php
abstract class CrazyPeople {
}

class BrunoAugusto extends CrazyPeople {
}

 

Podemos utilizar esse relacionamento tanto com classes abstratas (como no exemplo acima), quanto com classes concretas ou interfaces:

 

gallery_94216_5_5388.png

 

O código PHP fica assim:

 

<?php
abstract class ClasseAbstrata {
}

class ClasseConcreta extends ClasseAbstrata {
}

interface UmaInterface {
}

class OutraClasseConcreta extends ClasseConcreta implements UmaInterface {
}

 

Eu já ilustrei os outros relacionamentos que temos (associação, agregação e composição), então não vou falar de todos eles, mas veja só:

 

gallery_94216_5_6452.png

 

Esse diagrama se lê assim:

 

Empresa está associada com 1 ou vários Profissional. Tanto Diretor quanto Gerente são Profissional, que podem ser contratados pela Empresa e esse relacionamento se dá pela propriedade privada profissionais e pelo método público contrata.

 

O código do diagrama acima fica assim:

 

<?php
interface Profissional {
}

class Diretor implements Profissional {
}

class Gerente implements Profissional {
}

class Empresa {
/**
	* @var	array[Profissional]
	*/
private $profissionais = array();

/**
	* @param	Profissional $profissional
	*/
public function contrata( Profissional $profissional ) {
	$this->profissionais[] = $profissional;
}
}

 

Viu, é simples, não tem muita coisa um diagrama de classes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Clap, Clap, Clap, Clap \o/ Mais uma bela aula do mestre João.

 

Vou indicar esse post na sala da faculdade pra galera dar uma olhada.

 

@João

 

Nesse trecho de sua classe:

 

public function contrata( Profissional $profissional ) {
               $this->profissionais[] = $profissional;
       }

 

A tipagem da classe Profissional se faz realmente necessária?

Ao estilo Java? Ou é somente uma opção?

Compartilhar este post


Link para o post
Compartilhar em outros sites

A tipagem da classe Profissional se faz realmente necessária?

 

Sim, se faz realmente necessária, afinal, a Empresa contrata Profissional, se não dissermos o que ela contrata, ela poderá acabar contratando qualquer coisa. Não queremos isso.

 

Ao estilo Java? Ou é somente uma opção?

 

Estilo Java??? De onde você tirou isso?

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.