Ir para conteúdo

POWERED BY:

Arquivado

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

Daniel-Lopes

Criando um sistema usando PHP OO

Recommended Posts

Bom dia pessoal,

Fiz um curso (online) de PHP OO aqui no IMASTERS.

 

Agora estou querendo desenvolver um sistema usando php oo.

 

Neste sistema será como uma pequena rede social.

As funções básicas seria:

 

- login / logout

- cadastro no site (Editar - excluir - cadastrar)

- Adicionar/excluir amigos

- postar (adicionar ou excluir)

- adicionar/remover comentários

- pesquisar pessoas cadastradas

- visualizar perfil das pessoas cadastradas (sendo amigo visualiza completo / não sendo amigo apenas informações básicas)

 

seria algo assim

 

Estou com dificuldades em dividir essas tarefas em classes seguindo o principio classes "fracamente acopladas e fortemente coesas" então preciso de algumas dicas e sugestões de como fazer essa divisão.

Outro detalhe, como estou programando em PHP OO e para o sistema ser realmente orientado a objetos eu terei que usar classe para escrever o html ou posso fazer um misto entre os dois?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu achei essa classe aqui nos meus documentos... Acredito que pode dar uma ajuda para voce... Lembrando que nao foi eu que fiz o código... Peguei ele em algum lugar na net... Flws

 

<?php
class Login {
// DEFININDO VARIÁVEIS
private $SenhaUsuario, $tabela, $campoLogin, $campoSenha;
public $LoginUsuario, $msgErro;

// DEFINIR AS INFORMAÇÕES DA CLASSE
function Login($tabela = "usuarios", $campoLogin = "login", $campoSenha = "senha", $msgErro = "Login ou senha inválido"){
	$this->tabela = $tabela;
	$this->campoLogin = $campoLogin;
	$this->campoSenha = $campoSenha;
	$this->msgErro = $msgErro;
}

// FAZENDO LOGIN DO USUARIO
function logar($login,$senha,$redireciona = false){
	// Informações do formulário
	$this->SenhaUsuario = mysql_real_escape_string(addslashes($senha));
	$this->LoginUsuario = mysql_real_escape_string(addslashes($login));

	// Verifica se o usuário existe
	$consulta = @mysql_query("SELECT ".$this->campoLogin.",".$this->campoSenha." FROM ".$this->tabela." WHERE ".$this->campoLogin." = '".$this->LoginUsuario."' LIMIT 0,1");
	$campos = @mysql_num_rows($consulta);

	// Se o usuário existir
	if($campos != 0):
		// Se a senha estiver incorreta
		if($this->SenhaUsuario != @mysql_result($consulta,0,$this->campoSenha)):
			return $this->msgErro;
		// Se a senha estiver correta
		else:
			// Coloca as informações em sessões
			session_start();
			$_SESSION['LoginUsuario'] = $login;
			$_SESSION['SenhaUsuario'] = $senha;
			// Se for necessário redirecionar
			if ($redireciona):
				header("Location: ".$redireciona."");
			endif;
		endif;
	// Se o usuário não existir
	else:
		return $this->msgErro;
	endif;
}

// VERIFICA SE O USUÁRIO ESTÁ LOGADO
function verificar($redireciona = false) {
	session_start();
	// Se estiver logado
	if(isset($_SESSION['LoginUsuario']) and isset($_SESSION['SenhaUsuario'])):
		global $LoginUsuario;
		$LoginUsuario = $_SESSION["LoginUsuario"];
		return true;
	// Se não estiver logado
	else:
		// Se for necessário redirecionar
		if ($redireciona):
			header("Location: ".$redireciona."");
		endif;
		return false;
		exit;
	endif;
}

// LOGOUT
function logout($redireciona = false) {
	session_start();
	// Limpa a Sessão
	$_SESSION = array(); 			 
	// Destroi a Sessão
	session_destroy();
	// Modifica o ID da Sessão
	session_regenerate_id();
	// Se for necessário redirecionar
	if ($redireciona):
		header("Location: ".$redireciona."");
		exit;
	endif;
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia pessoal,

Fiz um curso (online) de PHP OO aqui no IMASTERS.

 

Agora estou querendo desenvolver um sistema usando php oo.

 

Neste sistema será como uma pequena rede social.

As funções básicas seria:

 

- login / logout

- cadastro no site (Editar - excluir - cadastrar)

- Adicionar/excluir amigos

- postar (adicionar ou excluir)

- adicionar/remover comentários

- pesquisar pessoas cadastradas

- visualizar perfil das pessoas cadastradas (sendo amigo visualiza completo / não sendo amigo apenas informações básicas)

 

seria algo assim

 

Estou com dificuldades em dividir essas tarefas em classes seguindo o principio classes "fracamente acopladas e fortemente coesas" então preciso de algumas dicas e sugestões de como fazer essa divisão.

Outro detalhe, como estou programando em PHP OO e para o sistema ser realmente orientado a objetos eu terei que usar classe para escrever o html ou posso fazer um misto entre os dois?

 

Daniel, o primeiro passo já foi dado. Definir as tarefas.

O próximo passo, agora, é encontrar atores que executem cada tarefa. Esse processo poderá mudar algumas vezes dependendo do passo a seguir:

Definir a forma como os atores se relacionam. Aqui começa a requisição de conhecimento de padrões de projeto, os Design Patterns, estruturais, relacionados à arquitetura de sistema. Esse passo pode diminuir ou aumentar o número de classes já definidas. Independente disso, é aqui - na minha opinião - que começamos a diferenciar um sistema Coeso de uma macarronada. Passar por este passo pode te remeter ao passo anterior, que fará ter que checar se a nova quantidade de atores se adequa à arquitetura proposta.

 

À primeira vista, todas as tarefas remetem a um mesmo ator: o membro. De fato, um membro pode executar todas as tarefas acima descritas. Porém, indo mais profundamente, notamos que algumas das tarefas não são necessariamente a responsabilidade do membro, e sim requisições. Tomando como exemplo

 

- postar (adicionar ou excluir)

 

Posts, fazem parte de um mural. Dizemos então que o membro tem um mural. Será o mural o responsável por receber, organizar, ordenar, exebir, permitir-ou-não edição, exclusão e gestão de comentários.

 

Analogamente, não é no mural que decide se o membro pode ou não realizar tarefas. Podemos delegar essa responsabilidade a um "porteiro", que fará a autenticação e autorização de membros, querendo executar tarefas.

 

No momento não disponho de ferramentas para montar um diagrama, além deste post já estar extenso demais.

Como você fez o curso, a base já tem, o empurrão acabou de ser dado, basta caminhar agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro Oliveira, muito obrigado, talvez precise apenas de mais um pequeno empurrão rs..

 

Até o momento cheguei a esta conclusão:

 

Seguindo sua explicação os "atores" desta classe poderia ficar da seguinte forma:

 

classes e suas responsabilidades

 

UserAuth

- login (daria as permissões para manipulação no sistema )

- logout (removeria permissões para manipulação no sistema)

- Password (Esqueceu senha)

 

UserRegister

- subscribe(cadastrar no site)

- confirm (Confirmar cadastro)

- unsubscribe (descadastrar ou excluir cadastro do site)

 

UserPublish (classe pai)

* Classes filhas da classe UserPublish (Porque pelo que entendo você se faz a pegunta comentar é um tipo de post ? sim então usa se Herança)

UserPost (postar)

UserPostComment (postar Comentários)

UserPostVote (votar nas postagens)

 

 

O Caminho seria este ou não?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vale lembra que sempre é válido utilizar UML para a modelagem dos dados e documentação. Com os artefados da UML facilita muito o desenvolvimento. Sempre que vou fazer análise e/ou desenvolver algo utilizo pelo menos um Diagrama de Casos de Uso, sendo que pode-se modelar as classes posteriormente com o Diagrama de Classes. Claro que há muitos artefados que são muito interessantes para serem utilizados, como os diagramas de sequência e atividades.

 

Parabéns pelo pontapé inicial :thumbsup: Boa sorte no seu aprendizado, Orientação a Objetos abre novos horizontes!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abstração e granularidade são, além de pessoais, conceitos muito inexatos.

 

Da mesma forma que podemos ver a solução de um problema simples como

 

if ($test) {
   // do if $test is True
} else {
   // do if $test is False
}

 

contra

 

$test ? /* do if True */ : // do if False

 

Também podemos considerar responsabilidades de maneiras diferentes. Acho, inclusive, que está demorando para vir alguém e dizer que terá que usar MVC e etc.

 

Uma coisa é fato: Enquanto você não tiver experiência, terá que voltar atrás diversas vezes com sua modelagem inicial. E assim que você aprenderá, passando por diversos cenários.

 

Eu não sou, nem de longe, a pessoa mais indicada para te informar o caminho correto. Mas se você sempre andar por bons caminhos, nunca saberá como é um buraco pra poder desviar dele ;)

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.