Metodologias para Desenvolvimento de Sistemas Desenvolvimento Orientado a Objetos (OO)



Baixar 69.15 Kb.
Encontro29.10.2017
Tamanho69.15 Kb.
Metodologias para Desenvolvimento de Sistemas

Desenvolvimento Orientado a Objetos (OO)

A base do desenvolvimento de sistemas orientados a objetos são naturalmente os objetos.

O conceito de objetos de software originou-se da necessidade de modelar objetos do mundo real em simulações de computador.

Objeto → um pacote de software que contém uma coleção de procedimentos e dados relacionados.



  • Procedimentos → métodos, mensagens (nome diferente para diferenciar de funções não relacionadas a objetos)

  • Dados → variáveis ou atributos

Um objeto

Por exemplo, considere como podemos definir um objeto para modelar um usuário de um sistema de compras via web.



Objeto Cliente

Objetos são uma forma de programar simples e poderosa:



  • Podem ser definidos e mantidos independentemente uns dos outros;

  • Definem um universo auto-contido;

  • Tudo que o objeto “sabe” e representa é definido por suas variáveis/atributos;

  • Tudo que o objeto “pode fazer” é expresso por seus métodos.

Outro importante motivo para a criação e o estabelecimento do paradigma orientado a objetos diz respeito ao compartilhamento da informação utilizada/manipulada pelos programas.

Utilizaremos como exemplo as linguagens de terceira geração que seguem o paradigma estruturado. Em tais linguagens, o conceito de funções permite que mais de um programador trabalhem no mesmo projeto de software ao mesmo tempo, sendo que cada programador deve trabalhar em diferentes parcelas do programa (funções) em cada momento.

Ainda, todas as interações complexas do programa tenderão a escrever/atualizar dados em variáveis visíveis a estas funções. Desta forma, deve existir uma forma de definir claramente os direitos e responsabilidades de acesso das variáveis, fato que geralmente não ocorre eficientemente, principalmente em projetos de médio e grande porte.

Embora a programação estruturada forneça um certo nível de modularização (por exemplo as variáveis definidas dentro de uma função só são visíveis dentro do escopo {} daquela função), construções tais como ponteiros e variáveis globais provêm formas de “burlar” tal restrição de acesso aos dados , permitindo desta forma que as funções acessem virtualmente qualquer informação pertinente ao programa.

De modo a prover os programadores de uma maneira efetiva para encapsulamento de informações assim como induzir modularização real, o conceito de programação OO prosperou.

Como exemplo, utilizaremos a entidade usuário. Tal entidade possui diversas interpretações podendo ser definida por uma variedade de atributos e comportamentos dependendo do contexto no qual tal entidadedeve existir.

Imagine a entidade usuário de um sistema operacional. Tal entidade deve em tal contexto possuir os seguintes atributos:


  • login

  • senha

  • permissões de acesso

  • nome

  • sobrenome

  • path_home

Já a mesma entidade usuário de um sistema de compras online será definida por um conjunto diferente de atributos, tais como:

  • login

  • senha

  • nº cartão de crédito

  • carrinho de compras

  • endereço

  • telefone

  • e-mail

A este processo de identificação dos atributos pertinentes para a modelagem de um objeto com base no contexto no qual o objeto deverá existir e operar damos o nome de Abstração.

A discussão anterior também se aplica aos comportamentos ou funções que comporão os objetos. Como podemos imaginar, um método para adição de produto ao carrinho de compras não faz o menor sentido no caso do objeto usuário de um sistema operacional, no entanto o mesmo método não é apenas pertinente mas também necessário para o caso do sistema de compras online.

Ex: O sistema Geometrix é um programa que permite o desenho e cálculos relacionados a figuras geométricas tais como pontos, linha, retângulos, círculos, esferas, elipses, cubos, curvas, polígonos e polilinhas. Algumas figuras tais como retângulos e círculos podem ser capazes de informar suas áreas, perímetros dentre outras métricas geométricas. Todas as figuras podem ser redimensionadas (exceto os pontos), rotacionadas, escalonadas, ter suas coordenadas atualizadas ou movidas por meio de um offset definido pelo usuário. O conjunto de todas as figuras desenhadas em um sessão do programa compõem um diagrama que pode ser salvo ou carregado de um arquivo salvo em disco.

Com base na descrição acima, identifique os possíveis objetos do sistema, seus atributos e métodos.



Objetos x classes x instâncias

Objetos são uma forma de identificar as entidades que comporão o sistema. No entanto, é importante notar que existe a possibilidade de que mais de uma instância ou exemplar do mesmo objeto existam no sistema.

Considere o sistema de compras online descrito anteriormente. É perfeitamente plausível que mais de um cliente esteja usando o website ao mesmo tempo. Neste caso é de se esperar que duas ou mais instâncias do objeto usuário existam ao mesmo tempo.

Desta forma, a metodologia OO deve prover uma forma de definir a estrutura geral de objetos a partir da qual várias ocorrências do mesmo podem ser criadas.

Dizemos que objetos do mesmo tipo compõem uma classe de objetos pois todos eles compartilham:


  • mesmas funcionalidades

  • mesmos atributos (potencialmente com valores diferentes)

Uma classe é uma “forma” para criação ou instanciação de diversas instâncias de um mesmo objeto.

Desta forma os três conceitos objeto, classe e instância relacionam-se da seguinte forma:

O objeto define a abstração do objeto ou entidade do mundo real a ser modelado como um artefato de software levando em conta a abstração dos atributos e funcionalidades relevantes ao domínio da aplicação.

Classes definem a estrutura do objeto e a partir da classe várias instâncias poderão ser criadas.

Uma outra forma de pensar a respeito de classes é que classes são tipos, e várias instâncias podem ser criadas a partir delas.

As classes definem o template para a criação de instâncias. O código dos métodos existe, no entanto apenas nas classes. Ao criar uma instância de uma classe o que é realmente alocado na memória é o espaço para cada um dos atributos definidos nas classes. Adicionalmente uma referência para cada um dos métodos (públicos e privados) é também alocada.



Definindo classes em Java

publicclass

{

private;



private (argumentos) {...}

// interface

public (argumentos) {...}

}

Exercício: Defina em Java classes para os objetos definidos para o exemplo Geometrix.



Encapsulamento

Encapsulamento é um conceito fundamental em programação OO. A idéia que permeia o conceito de encapsulamento é isolar o conteúdo (atributos e métodos) de um objeto do mundo exterior (outros objetos). Os objetos devido ao encapsulamento atuam tal como “caixas pretas”. Sua mecânica e sua estrutura não importam, apenas a sua interface, ou seja, a porção do objeto publicada ou deixada visível para o mundo exterior.

Os atributos devem por definição serem privados, ou seja, não visíveis por entidades externas ao objeto. Desta forma, todos os atributos são encapsulados ou escondidos.

Alguns métodos que dizem respeito apenas ao funcionamento interno do objeto são definidos como provador e desta forma escondidos do mundo exterior, sendo apenas visíveis para outros métodos do objeto.

Finalmente, uma parcela dos métodos do objeto devem ser definidos como públicos. Tais métodos compõem a interface do objeto. Tal conjunto de métodos também é chamado o conjunto de mensagens ao qual o objeto responde.

Existe um método especial que faz parte da interface do objeto chamado método construtor. Tal método é responsável pela criação de instâncias da classe.

Dinâmica de Funcionamento de Programas OO

Programas OO funcionam por meio de troca de mensagens entre objetos. Instâncias são criadas, seus atributos definidos inicialmente e o propósito do programa é alcançado via troca de mensagens entre objetos. A troca de mensagens nada mais é do que um objeto A invocar uma dada mensagem (método público pertencente a interface do objeto) do objeto B.

Todo programa OO possui um pronto de entrada, ou seja, um ponto de partida a partir do qual os primeiros objetos são criados.

Exemplos de função inicial em C++ e classe inicial em Java.



Agregação de Objetos

Uma característica interessante da programação OO é a capacidade de se criar objetos mais complexos por meio da combinação de objetos mais simples.

Agregar objetos é utilizar objetos como atributos de objetos mais complexos.

Considere o exemplo do objeto Linha do exemplo Geometrixvisto anteriormente. Uma linha pode ser definida como um segmento de reta ligando dois pontos. Desta forma, podemos criar o objeto como possuindo internamente duas instâncias do objeto mais simples chamado ponto.



Agregação ou a capacidade de se utilizar objetos dentro de objetos traz diversas vantagens:



  1. Flexibilidade na definição de objetos;

  2. Incentiva a criação de objetos pequenos e simples, que são mais facilmente verificados, testados e programados;

  3. Permite que objetos complexos sejam criados com menos esforço.

Polimorfismo (muitas formas)

Polimorfismo é uma característica das linguagens OO. A idéia é que funções (métodos) da mesma classe ou de classes diferentes possuam o mesmo nome.

Existem basicamente três tipos de polimorfismo:


  1. Inclusão: Um ponteiro para classes mãe pode apontar para uma instância de uma classe filha. Ex: List lista = new LinkedList();

  2. Paramétrico: permite que uma função ou tipo de dados seja definido parametricamente de modo que ele lide com valores de maneira similar sem depender do tipo do dado em questão:

Ex:

class List {

class Node {

T elem;


Node next;

}

Node head;



Intlength() {…}

}

public class Animal {



string talk();

}
public class Gato extends Animal {

string talk() {return “Miau!”}

}
public class Cachorro extends Animal {

string talk() {return “Auau!”}

}
static void write (Animal a) {

System.out.println(a.talk()); }
static void main () {

write (new Gato());

write (new Cachorro());

}


  1. Sobrecarga de função: Permite que dois ou mais métodos da mesma classe tenham o mesmo nome desde que os parâmetros sejam distintos.

Ex:

Ponto () { x = 0; y = 0; }

Ponto (intnx, intny) {x =nx; y = ny;}

Herança

Agregação não é a única forma de se definer objetos com base em objetos pré-existentes. Programação OO define ainda uma poderosa ferramenta para definição de classes chamada herança.



A idéia de herança é fundamentada devido ao fato de que certos objetos podem ser vistos como especializações de objetos mais genéricos pré-existentes.

A idéia por trás da herança é que objetos mais complexos podem ser criados estendendo objetos mais genéricos. Chama-se subclasse a classe que estende uma classe pré-existente.



Quando criamos uma classe por meio de herança a subclasse herda todos os atributos e métodos da classe pai (superclasse).



Classes Abstratas

Com relação a herança de classes, é possível definir uma classe como sendo abstrata. Este tipo especial de classe não pode ser instanciada e serve apenas para definir uma estrutura e interface uniforme a ser compartilhada por todas as subclasses.


Baixar 69.15 Kb.

Compartilhe com seus amigos:




©bemvin.org 2020
enviar mensagem

    Página principal
Prefeitura municipal
santa catarina
Universidade federal
prefeitura municipal
pregão presencial
universidade federal
outras providências
processo seletivo
catarina prefeitura
minas gerais
secretaria municipal
CÂmara municipal
ensino fundamental
ensino médio
concurso público
catarina município
Dispõe sobre
reunião ordinária
Serviço público
câmara municipal
público federal
Processo seletivo
processo licitatório
educaçÃo universidade
seletivo simplificado
Secretaria municipal
sessão ordinária
ensino superior
Relatório técnico
Universidade estadual
Conselho municipal
técnico científico
direitos humanos
científico período
espírito santo
pregão eletrônico
Curriculum vitae
Sequência didática
Quarta feira
prefeito municipal
distrito federal
conselho municipal
língua portuguesa
nossa senhora
educaçÃo secretaria
segunda feira
Pregão presencial
recursos humanos
Terça feira
educaçÃO ciência
agricultura familiar