Por que eu devo ler este artigo:Este artigo é importante, pois mostra em detalhes os principais conceitos da programação orientada a objetos (POO). Assim, o leitor terá uma base mais sólida para iniciar ou seguir sua carreira na programação de sistemas orientado a objetos.

A utilização da O.O. na construção de um software o torna mais próximo da compreensão do problema do mundo real a ser resolvido através de uma solução computacional, pois o software é modularizado através de suas classes com responsabilidades distintas, sendo que cada classe representa aspectos importantes da entidade da realidade em se detêm o contexto do problema.

No primeiro artigo sobre a POO focamos em uma introdução aos paradigmas das linguagens de programação, introdução a orientação a objetos e conhecemos um pouco da POO e sua estrutura e como funciona no mundo real.

Neste segundo artigo iremos de fato aprender a programação orientada a objetos, ou seja, criar uma classe a partir de um diagrama UML, definir seus atributos, criar e simular a implementação de métodos, entender os modificadores de acesso, o encapsulamento, gets e sets e por fim instanciaremos um objeto fazendo uso de seus recursos em aplicação Windows Forms.

Para isso, será demonstrado o funcionamento POO através da linguagem de programação C#.

O mais interessante na POO é poder capturar objetos e características das entidades e assim iniciar o processo modelagem das classes que irão compor um sistema. Este conjunto de classes troca mensagens entre si, e é importante ressaltar que um programador faz uso das boas práticas que a OO nós trás e deixa de lado o vício de ficar criando e reinventando código a cada novo projeto que surge.

Uma equipe de desenvolvimento que se presa faz uso de boas bibliotecas de código que já deram certo em projetos passados, melhorando o tempo de produção do sistema.

De agora em diante iremos analisar representações de um sistema orientado a objetos através da modelagem UML e codificar o mesmo em um sistema real com o Visual Studio 2012 e linguagem de programação C# da Microsoft.

Composição e codificação de uma classe

Uma classe representa uma entidade do mundo real, seja algo concreto ou abstrato. Assim, precisamos abstrair pontos importantes da entidade que fazem sentido na proposta do software a que se pretende construir. As abstrações retiradas das entidades devem compor a estrutura da classe formando seus atributos e métodos.

A seguir iremos detalhar algumas das características importantes que o leitor deve ter conhecimento a respeito de uma classe. Para isso, teremos como base uma classe representada através do diagrama de classes da UML, conforme a Figura 1, pois trata de representar a base para criar um objeto produto ou um conjunto deles de forma abstrata para que possamos manipular informações de produtos do mundo real em nossos sistema computacional.

Perceba na representação que temos vários atributos como o nome do produto, preço de venda, data de cadastro, e cada atributo é de um determinado tipo de dado como um inteiro, sequência de caracteres string, número decimal, valor booleano e um tipo que representa data e hora na linguagem de programação C#.

image

Figura 1. Classe produto representação com diagrama UML

Ainda observando a classe produto da Figura 1 temos os métodos que representam as operações que a classe pode executar, neste contexto temos quatro operações que representa um CRUD (BOX 1) para a manipulação de dados em um banco de dados qualquer.

BOX 1. CRUD

O CRUD é um acrônimo de create, read, update e delete, que são quatro operações básicas de inclusão, consulta, alteração e exclusão de dados em um SGDB. Estas operações geralmente são realizadas em banco de dados relacionais através de transações enviadas por um cliente, ou seja, um software pode manipular dados entre o banco de dados onde estão armazenados os dados e a exibição em UI para o usuário final, pois a interface de usuário pode permitir ao mesmo realizar as operações CRUD de forma simples e eficaz.

Para tornar este artigo bem produtivo, daqui para frente usaremos duas ferramentas para exemplificar a estrutura da POO. Neste caso iremos usar o Visual Studio 2012 para criar um projeto e codificar o mesmo em C# e também será disponível para download o projeto UML criada com a ferramenta Astah Community no qual pode ser baixado no link que se encontra na sessão Links ao final do artigo.

Em projetos de software bem organizados e estruturados, a codificação das classes de um sistema é criada a partir de diagramas de classes da UML, que é uma linguagem de modelagem bem difundida há anos e que auxilia na construção de sistemas e seus diagramas fazem parte da documentação.

Os conceitos da UML são bem aplicados dentro da engenharia de software etapa esta que antecede a codificação. Geralmente, a documentação inicial do software tem diagramas de caso de uso que representam as funcionalidades do sistema a que se pretende construir.

Os diagramas UML que representam as características do software são criados por um analista de negócio, analista de sistemas ou pelo um arquiteto de software.

Para codificar um software e iniciar a criação de suas classes é necessário escolher uma linguagem de programação e a ferramenta IDE para ajudar a automatizar parte das tarefas durante o processo de desenvolvimento como, por exemplo, a compilação do software, que é o processo que transforma o código fonte escrito em um código que possa ser entendível pelo hardware e assim execute o programa construído em cima sistema operacional.

Partindo deste princípio uma linguagem de programação segue uma sintaxe, que são regras a serem seguidas na escrita da codificação do software, ou seja, os comandos da própria linguagem de programação seguem uma ordem lógica. Na Figura 2 podemos ver a sintaxe correta para escrever uma classe.

Vejamos que a sequência de comandos deve ser seguida na ordem correta, informando o modificador de acesso, palavra que define que é uma classe e o nome da classe. Após isso, temos um par chaves que definem o escopo da classe. É aqui que devemos colocar os atributos, métodos, variáveis e a lógica para a classe.

image

Figura 2. Sintaxe para criar uma classe

Para escrever uma classe devemos seguir uma nomenclatura para a escrita do nome da classe e de seus atributos e métodos. Assim, a primeira letra do nome da classe deve estar em maiúsculo e, caso tenha palavras compostas, devemos colocar a primeira letra da palavra subsequente também em maiúsculo para diferenciá-las, ou também podemos separar as palavras pelo caractere “_”.

As primeiras letras dos atributos e métodos de uma classe devem ser escritas em minúsculo e o restante da composição do nome dos atributos e métodos pode seguir o mesmo conceito do nome de uma classe.

A ideia da nomenclatura é que se possa diferenciar logo de cara, na hora da codificação, o que é uma classe e quais são atributos, métodos e instância de classe. No mercado existem ferramentas capazes de diferenciar os tipos objetos, como é caso do Visual Studio.

Modificadores de acesso

As classes e seus membros internos, como os atributos e métodos, possuem um nível de acessibilidade ou visibilidade tanto para o acesso interno quanto externo, ou seja, é a forma de segurança de definir se os componentes do software poderão ser visíveis e usados apenas pelo próprio sistema ou se outros sistemas poderão fazer uso de componentes, como o conjunto de classes através de seus assemblies.

Como estamos falando de orientação a objetos, logo pensamos na reutilização do código. Para fazer uso desse recurso sempre se deve levar em conta o aspecto da segurança para que o software (ou parte dele) não fique vulnerável. Pensando nisso, devemos definir a acessibilidade através de modificadores de acesso. A seguir veremos os tipos de modificadores:

  • public: Define que a acessibilidade de um tipo ou membro dele pode ser acessado pelo mesmo assemblie onde está contido. É possível que outro sistema possa fazer referência a ele e faça uso de seus recursos.
  • private: Define que o tipo ou membro dele pode ser acessado apenas pelo código na mesma classe.
  • protected: Define que o tipo ou membro dele pode ser acessado apenas pelo código na mesma classe ou uma classe derivada da classe base.
  • internal: Define que a classe pode ser acessada por qualquer código no mesmo assemblie, mas não através de outros assemblies.

Para entender melhor este conceito imaginemos um sistema com diversas classes e cada uma com o propósito de executar uma tarefa específica. Assim, só será possível executar tarefas se o método main tiver instâncias de várias classes para executar as tarefas que lhe é designado e concluí-las, assim, precisamos definir o nível acesso e tornar visível as classes que método main irá precisar para cumprir seu papel em executar as tarefas.

O conceito de acessibilidade de atributos e métodos em uma classes também é de suma importância quando aplicamos o encapsulamento. Veremos detalhes o encapsulamento mais a frente neste artigo.

Atributos

Os atributos de uma classe representam as características abstraídas do objeto do mundo real, assim, uma classe pode ter vários atributos (ou campos). Cada atributo em uma classe em C# deve ter um tipo predefinido no momento de sua criação, já que a linguagem é fortemente tipada.

Uma característica importante a respeito dos atributos é que os mesmos sempre devem ter seu modificador de acesso definido como privado, já que é uma boa prática de programação encapsular, principalmente quando se programa com uma linguagem de programação orientada a objetos e o uso do recurso de encapsulamento de dados em uma classe se faz necessário.

Quando se cria um objeto, ou melhor, se instancia um objeto a partir de uma classe, temos como definir valores aos atributos no momento em que o objeto é criado. Estas propriedades pertencem ao objeto instanciado, pois o conjunto de atributos de um objeto e seus valores definem o estado em que o mesmo se encontra.

Nenhum objeto é igual a outro, mesmo tendo os mesmos atributos e valores iguais atribuídos, então devemos ter em mente que um objeto instanciado durante a execução de um programa sempre será único.

Vejamos agora como codificar os atributos de uma classe tomando como exemplo a classe produto que está representada na Figura 1. Faremos um projeto Windows Forms no Visual Studio 2012 com nome de “ArtigoPOO” e em seguida vamos inserir uma classe de nome “Produto”, conforme a Listagem 1.

Listagem 1. Codificação de atributos da classe Produto

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ArtigoPOO
{
   public class Produto
    {
        private int codigo;
 ... 

Quer ler esse conteúdo completo? Tenha acesso completo