0

Orientação a Objetos em PHP

phpEncapsulamento

O encapsulamento é um recurso da Orientação a Objetos que tem como função esconder os dados de um objeto de outros objetos, permitindo que os mesmo sejam acessados através de seus próprios métodos. Com o recurso de encapsulamento uma classe possui responsabilidades sobre os seus atributos. Uma de suas vantagens é esconder do usuário os detalhes de implementação do objeto.

Para implementar o encapsulamento em um objeto de uma classe de domínio, podemos definir visibilidade as propriedades e dos métodos deste objeto. A visibilidade define a forma que suas propriedades serão acessadas através do uso de modificadores de acessos.

Modificadores de Acesso

Os modificadores de acesso definem a visibilidade de cada propriedade ou método de um objeto. A visibilidade de uma propriedade pode ser: public, protected, private, static. A visibilidade de um método pode ser: public, static, private,final.

Visibilidade de Atributos

  • Modificador public

A visibilidade padrão de um atributo é publica isto significa que o mesmo pode ser acessado e modificado em qualquer lugar de sua aplicação. Mantendo as boas práticas de programação, devemos inserir o modificado public na declaração de um atributo.

Sintaxe:

  • Modificador private

Um atributo privado só pode ser acessado pela classe onde foi declarado, o mesmo não é acessado através de suas subclasses.

Sintaxe:

  • Modificador static

Um atributo static não precisa ser instanciado para ser acessado.

Sintaxe:

Para acessar o atributo estático for do escopo de uma classe sem instanciar o objeto, basta colocar o nome da classe onde foi declarado no inicio da declaração.

Exemplo:

  • Modificador protected

Um atributo protected só pode ser acessado pela classe onde foi declarado e nas suas subclasses.

Sintaxe:

Visibilidade de Métodos

  • Modificador public

Todos os métodos que não possuem um modificador por default são públicos, porém é recomendado que defina o modificador public na hora da criação do método.

Sintaxe:

  • Modificador private

O modificador de acesso private, define que um  método só pode ser acessado dentro do escopo de sua classe.

Sintaxe:

  • Modificador static

Um método static permite que sejam acessados atributos estáticos dentro de uma classe e nada mais. Não é preciso instanciar um objeto para acessar um método estático.

Sintaxe:

  • Modificador final

O modificador de acesso final, define que um  método não pode ser sobrescrito nas subclasses.

Sintaxe:

 

0

Orientação a Objetos em PHP

phpAbstração

Abstrair, significa separar mentalmente, considerar isoladamente, simplificar. Para a construção de sistemas Orientados a Objetos, jamais devemos projetar um sistema como sendo uma peça única, devemos separa-los em partes, concentrando nos detalhes mais importantes e ignorando os detalhes de implementação em um primeiro momento, para podermos construir um sistema em partes muito bem definidas que possam posteriormente ser reaproveitadas.

Classes Abstratas

Utilizando o conceito de abstração, construiremos classes estruturais na hierarquia de nosso projeto para servirem de bases para outras. As classes abstratas são classes que nunca serão instanciadas na forma de objetos. Para a definição de uma classe abstrata fazemos o uso do operador ABSTRACT no início da declaração da classe.

Exemplo:

Classes Finais

As classes finais são classes que não podem ser especializadas, ou seja, uma classe final nunca poderá ser uma superclasse. Para a definição de uma classe final fazemos o uso do operador FINAL no início da declaração da classe.

Exemplo:

Métodos Abstratos

Um método abstrato é um método que não possui implementação na classe a qual foi definido, o detalhe de implementação fica a cargo da subclasse. A classe que possui pelo menos um método abstrato não pode ser instanciada e também deve ser definida como abstrata. Um método abstrato em si consiste na definição da assinatura na classe abstrata. Para a definição de um método abstrato fazemos o uso do operador ABSTRACT no início do método.

Exemplo:

Métodos Finais

Um método final não pode ser sobrescrito, ou seja, não pode ser redefinido em uma subclasse. Para definição de um método final faremos uso do operador FINAL no inicio da declaração do método.

0

Orientação a Objetos em PHP

phpPolimorfismo

Em programação orientada a objetos polimorfismo é o principio que permite que classes derivadas de uma mesma superclasse tenham métodos iguais, ou seja, com a mesma nomenclatura e parâmetros, mas comportamentos diferentes.

Polimorfismo significa ter ‘muitas formas’, que significa um único nome representando um código diferente, selecionado por algum mecanismo automático. “Um nome, vários comportamentos”.

Exemplo:

Testando o Exemplo:

 

0

Orientação a Objetos em PHP

php

Herança

Na Orientação a Objetos a Herança define um relacionamento entre classes, no qual uma classe compartilha sua estrutura e comportamentos com outras classes. Uma classe que herda as características de outra é chamada de subclasse, e a classe que fornece as características é chamada de superclasse. As heranças são definidas através de um mecanismo chamando Generalização / Especialização, onde generalização é representação da superclasse para a subclasse, e especialização é representação da subclasse para a superclasse. A Herança é estabelecida quando estabelecemos um relacionamento de Especialização de uma classe.

Uma Especialização repassa para uma subclasse todos os atributos e métodos definidos em uma superclasse.

O diagrama abaixo demonstrado um caso de Herança:

herança

O Veículo é uma Generalização de Carro e Moto.

Carro e Moto são Especializações de Veículo.

Para representar o relacionamento de herança em PHP, devemos seguir a sintaxe abaixo:

Sintaxe:

Exemplo:

 

0

Hibernate Relacionamento N:1

logoHibernateHibernate Relacionamento N:1

Nesta segunda parte da postagem sobre relacionamentos com o Hibernate demonstro a criação de um relacionamento N:1, utilizando as anotações do Framework. Para exemplificar o relacionamento seguirei o modelo abaixo:

Class Diagram

A anotação @ManyToOne representará o relacionamento na classe Produto. Segue a implementação das classes persistentes:

Classe Persistente Categoria

Classe Persistente Produto

Na classe Produto criamos um objeto do tipo categoria que será responsável pelo mapeamento do relacionamento neste objeto fazemos as seguintes anotações: @ManyToOne(fetch= FetchType.EAGER) que representa em sim o relacionamento do tipo N para 1, já o atributo fetch com valor FetchType.EAGER significa que toda vez que o objeto pai for recuperado da base o atributo mapeado também será recuperado; @JoinColumn é usada para informar qual o nome da coluna que corresponde à chave estrangeira do mapeamento os atributos  insertable e updatable que se assumirem true indica que o atributo deve ser inserido  ou atualizado; @Fecth vai definir como o atributo mapeado será recuperado da base, no nosso caso é feito um SELECT para recuperar o atributo. E assim conseguimos mapear o relacionamento N para 1, nas próximas postagens mapearemos um relacionamento N para N e N para N com atributos.

0

Hibernate Relacionamento 1:N

logoHibernateHibernate Relacionamento 1:N

Nesta postagem descrevo uma forma de modelar um relacionamento entre tabelas 1 para muitos com o uso das anotações do Hibernate. Criei um exemplo simples para demonstrar o uso do Framework de uma forma clara e direta. Segue o modelo a ser implementado.

hibernate1-N

Para exemplificar o relacionamento criaremos as classes persistentes Departamento e Funcionário. A classe Departamento possuirá o relacionamento 1:N através de um atributos do tipo lista de funcionários e a partir de uma anotação @OneToMany.

A implementação da classe persistente Funcionario fica da seguinte forma:

A implementação da classe persistente Departamento fica da seguinte forma:

As classes Funcionario e Departamento serão mapeadas em nosso banco de dados com os nomes tbFuncionariotbDepartamento.

Nota-se que na classe Departamento foi feita a anotação @OneToMany que identifica o relacionamento 1:N, nesta anotação temos o atributo mappedBy com o valor ‘departamento’ onde este valor se refere a um atributo criado na classe Funcionario com o mesmo nome (ver classe Funcionario linha 37) este atributo serve em si para representar que na tabela tbFuncionario temos uma chave estrangeira  relacionada a tbDepartamento, o atributo fetch define quando o conteúdo o atributo será recuperado da base de dados.

A anotação @Cascade indica a ação em cascata a ser empregada do objeto pai para os objetos associados. Já na classe Funcionario foi criado um atributo do tipo departamento que recebe as anotações @ManyToOne que define que existem muitos funcionários para um departamento, @Cascade define as operações em cascata, @JoinColumn que define a chave estrangeira da tabela tbFuncionario, @Fetch  define como o atributo mapeado será recuperado da base de dados.

0

Como funciona o Hibernate

logoHibernateComo funciona o Hibernate

O Hibernate é um framework de mapeamento objeto relacional para aplicações Java, ou seja, é uma ferramenta para mapear classes Java em tabelas do banco de dados e vice-versa. É bastante poderoso e dá suporte ao mapeamento de associações entre objetos, herança, polimorfismo, composição e coleções.

O Hibernate não apresenta apenas a função de realizar o mapeamento objeto relacional. Também disponibiliza um poderoso mecanismo de consulta de dados, permitindo uma redução considerável no tempo de desenvolvimento da aplicação.

A Arquitetura do Hibernate

A arquitetura do Hibernate é formada por um conjunto de interfaces que são responsáveis por executar operações de criação, exclusão, consulta e atualização no banco de dados, além de uma interface para realizar configuração do Hibernate, interfaces responsáveis por realizar a interação entre os eventos do Hibernate e a aplicaçãoe interfaces que permitem a extensão das funcionalidades de mapeamento do Hibernate.

hibernatearquitetura

Além do mapeamento dos objetos relacionais e integração com os bancos de dados o Hibernate interage com APIs já existentes do Java: JTA, JNDI e JDBC.

As principais interfaces do Hibernate são: Session, SessionFactory, Transaction, Query, Configuration. Com essas interfaces conseguimos criar todas as nossas rotinas de banco de dados.

Interface Session

Possibilita a comunicação entre a aplicação e a persistência, através de uma conexão JDBC. É um objeto leve de ser criado, não deve ter tempo de vida por toda a aplicação e não é threadsafe. Um objeto Session possui um cache local de objetos recuperados na sessão. Com ele é possível criar, remover, atualizar e recuperar objetos persistentes.

Interface SessionFactory

Responsável por manter o mapeamento objeto relacional em memória. Permite a criação de objetos Session, a partir dos quais os dados são acessados, também denominado como fábrica de objetos Sessions. Deve existir apenas uma instância dele na aplicação, pois é um objeto muito pesado para ser criado várias vezes.

Interface Configuration

É utilizada para realizar as configurações de inicialização do Hibernate. Com ele, define-se diversas configurações do Hibernate, como por exemplo: o driver do banco de dados a ser utilizado, o dialeto, o usuário e senha do banco, entre outras. É a partir de uma instância desse objeto que se indica como os mapeamentos entre classes e tabelas de banco de dados devem ser feitos.

Interface Transaction

É utilizada para representar uma unidade indivisível de uma operação de manipulação de dados. O uso dessa interface em aplicações que usam Hibernate é opcional. Essa interface abstrai a aplicação dos detalhes das transações JDBC, JTA ou CORBA.

Interfaces Criteria e Query

As interfaces Criteria e Query são utilizadas para realizar consultas ao banco de dados.

Em breve uma abordagem sobre relacionamentos entre tabelas utilizando o Hibernate. Espero ter ajudado em sua pesquisa ou estudo.