Você está na página 1de 21

FACULDADE DE CIÊNCIAS E TECNOLOGIA

CURSO DE ENGENHARIA INFORMÁTICA 2ºANO – POO I


Texto de apoio provisório
Conceitos gerais de programação:

Entende-se como programa um conjunto de instruções escritas numa determinada linguagem que
transmite/diz ao computador o que deve ser feito.

O processo envolvido desde a criação destas instruções até a sua execução denomina-se por
programação. A programação é considerada um processo circular ao qual denominamos por ciclo
de desenvolvimento de um programa. Este ciclo envolve 4 etapas principais:

Análise do problema;

Desenho do programa para resolver o problema;

Codificação do programa;

Teste do programa desenvolvido.

Devido ao facto de existirem muitas formas e diferentes tipos linguagens de programação, estas podem
ser classificadas em diferentes níveis a citar:

Baixo nível: envolve o nível de dispositivos e o logico digital também conhecido como nível de portas
lógicas. Como exemplo de linguagem de baixo nível pode-se citar o Assembly.

Alto nível: engloba as linguagens orientadas a problemas. Este tipo de linguagem tenta aproximar-se
da linguagem natural utilizada pelas pessoas. Exemplos de linguagem de alto nível são: pascal, C, C++,
Java entre outros.

Na Figura 1apresenta-se uma comparação entre os diferentes níveis de linguagem de programação no


que se refere as instruções.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 1 de 21


Figura 1-Comparação entre os diferentes níveis de linguagem

Os computadores “pensam” em zeros e uns (códigos binários) e a forma destes perceberem as nossas
instruções é através da linguagem de máquina.

Atualmente grande parte dos computadores utiliza dois ou mais níveis de programação, assim os
programas em linguagem de algo nível carecem de ser traduzido para o nível mais baixo de forma a
serem executados.

Alto nível Compilador Linguagem de Máquina

Figura 2-

Deve-se notar o fato de que as linguagens utilizadas para desenvolver algoritmos são na sua maioria
diferentes das linguagens executadas pelos computadores.

No passado os computadores consistiam principalmente em válvulas e reles que eram programados


através da conexão de plugues e fios, deve citar o exemplo do ENIAC(eletronic numerical integrator
and calculator) considerado o primeiro computador digital eletrónico e o UNIVAC (universal
automatic computer).o primeiro computador a ser comercializado A linguagem utilizada nos dias de
hoje tem atuação direta no hardware da máquina. A este tipo de linguagem denominamos linguagem
de baixo nível.

As linguagens de baixo nível são de difícil e demorada programação. Assim, foram desenvolvidas
linguagens de alto nível.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 2 de 21


Os programas desenvolvidos através das linguagens de alto nível constituem o que se denomina por
código-fonte. O código-fonte é um conjunto de instruções escritas pelo programador utilizando uma
linguagem de programação. Este conjunto de instruções é convertido para linguagem de baixo nível,
a este processo denominamos por compilação ou interpretação. Um exemplo de código fonte é
representado na Figura 3.

Figura 3: Exemplo Código fonte em java.

Na Figura 4 representa-se o ciclo de complicação na linguagem de programação java. O fluxograma a


direita indica a etapas de compilação. Primeiro temos o programa em java, o conjunto de instruções.
Este conjunto de instruções é compilado pelo Java compiler em Java Bytecode. Por sua vez, o Java
virtual machine (JVM) carrega o(s) ficheiro(s) e ou interpreta ou compila para o código de máquina
específico.

No fluxograma a esquerda tem-se uma representação dos ficheiros gerados durante o processo de
compilação. Primeiro temos o ficheiro .java que contém o código-fonte do programa. A saída/
resultado do java compiler é um ficheiro .class (java class file) que é por sua vez executado pelo
JVM:

Figura 4- Ciclo de compilação e execução em Java

Nesta disciplina serão tratadas as linguagens de alto nível, concretamente o Java, utilizadas para
desenvolvimento de pequenos programas.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 3 de 21


As linguagens de programação são formadas por palavras que se agrupam em frases que produzem
um significado. As palavras utilizadas por uma determinada linguagem de programação são
denominadas de palavras-chave que sua vez formam as estruturas de programação. As linguagens
de programação possuem uma sintaxe1 própria definidas segundo regras da própria linguagem. Sendo
assim, um programa é constituído por palavras-chave e estruturas de programação.

O razão de existirem muitas linguagens de programação deve-se primeiramente no objetivo para qual
a mesma foi criada, o que não significa que uma linguagem seja melhor que outra. Individualmente, a
linguagens de programação foram desenvolvidas para solucionar problemas e cumprir determinada
função.

Tipos de linguagem de programação

Ao longo do desenvolvimento dos sistemas computacionais foram sido criadas diferentes tipos de
linguagem de programação em que cada uma apresentava recursos e particularidades especificas da
época. Destacam-se três tipos de programação:

Programação linear: também conhecida por programação sequencial. Este tipo de programação é
destinado a uma atividade específica.

Programação estruturada: possui maior funcionalidade e permite um desenvolvimento mais


interativo e organizado.

Programação orientada a objetos: permite grande interatividade e diversidade de ambientes e


dispositivos. Esta programação promoveu uma enorme transformação na forma como os sistemas
são concebidos.

Programação linear

Na programação linear, as criações de programas obedecem uma sequência de passos executados


consecutivamente, onde o inicio e fim estão bem definidos.

O princípio da programação linear era utilizado pelas primeiras linguagens de programação. Um


exemplo de linguagem que utiliza esteve tipo de programação é o Assembly (atualmente utilizada em

1 Sintaxe- constitui a parte da gramatica dedicada a estruturação das palavras de uma frase. Em programação a sintaxe
especifica a construção de instruções e comandos.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 4 de 21


procedimentos que manipulem diretamente o hardware do computador) e o Basic. Nestas linguagens
as instruções são numeradas uma a uma e a ordem de instrução obedece a esta numeração.

Apesar de existirem algumas restrições na forma de programação, como pouca flexibilidade, alguns
programas lineares podem ser desenvolvidos através da utilização de linguagens orientadas a objetos.
Uma das desvantagens deste tipo de programação é a complexidade e extensibilidade, o que dificulta
a compreensão.

Programação estruturada

Em programação a conceção de programas monolíticos2 para execução de tarefas complexa para alem
de ser complicado e demorado pode em algum momento produzir resultados diferentes do esperado.
Entretanto, a divisão de tarefas na conceção de objetos torna muito mais fácil e melhor a execução do
trabalho. Esta abordagem de divisão das tarefas para além de produzir o resultado esperado reduz o
tempo gasto, fator importante no desenvolvimento de um projeto.

Diz que um bom programador deve ser como um bom gerente no momento de atribuição de
funcionalidades a um programa. Ele deve ser capaz de separar tarefas para depois realiza-las de forma
a tornar o trabalho mais fácil. A programação estruturada é norteada por este principio.

O processo de divisão de tarefas existente na programação estrutura é denominado por


modularização. Este processo faz a divisão do programa em partes ou módulos que executam tarefas
especificas.

Procedimentos ou funções consistem em blocos de programas que executam tarefas especificas. Os


procedimentos ou funções são caraterizados por um nome que e utilizado como chamada de
procedimento ou função. Estes também recebem valores para que possam realizar suas tarefas.

O que distingue o procedimento das funções é o fato dos procedimentos não retornarem nenhum
valor embora os possam receber. Ao contrario que as funções podem retornar os resultados das
operações realizadas.

Os nomes atribuídos aos procedimentos são normalmente palavras ou frases pequenas que tentam
associar de forna mnemónica à tarefa realizada. Por exemplo:

2Programas Monolíticos não empregam mecanismos auxiliares como iteração, sub-divisão ou recursão, de modo que toda
a lógica do programa está contida em um único bloco: um monólito.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 5 de 21


ConverterDados();

Semelhante aos procedimentos, as funções também são nomeadas de igual modo. Entretanto, deve
lembrar que o nome de uma função pode ser utilizado em uma expressão como uma variável. Isto
deve ao facto de uma função retornar um valor quando a sua execução termina. Por exemplo:

soma(x,y);

No exemplo, a função soma faz a execução do somatório de dois valores que podem ser passados (x
e y). A estes valores que são passados nós designamos por parâmetros. Os parâmetros devem retornar
o resultado desta soma após a execução

No exemplo seguinte, é apresentado um programa na linguagem C que realiza a execução da soma de


dois números introduzidos pelo teclado e exibe o resultado no ecrã do utilizador.

/*função.c*/
main()
{
int x, y, r;
printf (“digite dois números: “);
scanf(“%d %d,&x,&y);
r = soma (x,y);
printf(“a soma dos números é: %d”,r);
}
/* soma()*/
/*retorna a soma de dois números*/
soma(j,k)
int j,k;
{
return (j+k);
}

De forma resumida, no exemplo, as variáveis x e y recebem números cuja entrada é realizada através
do teclado. De seguida a função soma (x,y) é chamada na linha 7 e executada na linha 12, por fim na
linha 15 retorna-se o valor da soma dos números. Este exemplo serve de exemplo para perceber como
funciona a chamada de função. Para alem das função criada podemos observar também funções
interna da própria linguagem, como é o caso do printf() e do scanf().

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 6 de 21


Uma pergunta que ocorre com muita frequência durante a criação de um programa é: por onde
começar ?

Para se iniciar a desenvolver um programa devemos partir da representação da solução do problema


em pseudocódigo ou fluxograma. Apenas a titulo de revisão, entende por fluxograma a todo o tipo
de algoritmo que utiliza símbolos gráficos para representar ações ou instruções a serem seguidas. E o
pseudocódigo entende-se como sendo o mecanismo utilizado para resolução de problemas ou para
definição de passo a serem utilizados na execução de tarefas.

Paradigmas da programação

Paradigma é o conjunto de regras que são utilizadas para estabelecer fronteiras e descrevem como
resolver problemas dentro destas fronteiras. Os paradigmas podem influenciar a nossa perceção e
ajudar a organizar e a coordenar a maneira como olhamos para o mundo.

As linguagens de programação podem adotar dois ou mais paradigmas de programação de forma a


melhorar analises e soluções.

Tipos de paradigmas de programação mais comuns

Os paradigmas podem ser definidos como pontos de vista ou ideias que podem existir sobre a
estruturação e execução de um programa. Diferentes metodologias são propostas através de diferentes
linguagens de programação, as quais apresentam diferentes paradigmas.

O paradigma também determina a maneira como um desenvolvedor analisa um determinado


problema. Esta fortemente ligado a maneira de pensar, resolver e implementar soluções.

Paradigma imperativo ou por procedimentos

É um paradigma antigo, e segue o estilo do matemático John Von Neumann. Um programa que utiliza
o paradigma imperativo executa tarefas em série, ou seja, uma após outra, manipulando variáveis

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 7 de 21


baseando-se em ordens ou comandos, onde variáveis são lidas num processo de entrada, manipuladas
ou alteradas e por fim atualizando variáveis e gerando a saída.

Este paradigma adota o conceito de estados e ações. As ações manipulam os estados onde pode-se
encontrar procedimentos que servem como mecanismos de estruturação

O paradigma Imperativo ainda é o mais utilizado nos dias atuais, e por incluir sub-rotinas e
procedimentos para estruturação, também é denominado por procedural. Este paradigma é
conhecido por ser eficiente e permitir realizar modelagem “natural” do mundo real. Entretanto, as
linguagem que adotam este estilo são de difícil legibilidade e as suas instruções são centradas no
“como” e não no “que”.

Exemplos de linguagens de programação que utilizam o paradigma imperativo: Ada, Algol, Basic, C,
Cobol, Fortran e Pascal.

A seguir apresenta-se um exemplo de código escrito com o estilo imperativo.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 8 de 21


Paradigma orientado a objetos

No Paradigma de Programação Orientado a Objetos, a programação é fundamenta-se na composição


e interação de várias unidades de softwares denominados objetos os quais se relacionam e trocam
mensagens entre si. Estes objetos são chamados de classes. Nestas classes cada comportamento é
denominado como método (ações). Já os estados de uma classe são chamados de atributo. Em cada
método e atributo podemos também definir a forma de relacionamento com os outros demais objetos.
O Paradigma Orientado a Objetos é considerado como o sucessor do Paradigma Imperativo,

No Paradigma Orientado a Objeto, cada classe possui suas responsabilidades. Existe apenas uma
classe global que serve de referencia para as outras classes. Objetos vinculados a classes se interligam
um ao outro através de heranças. A programação orientada a objetos tem como objetivo tornar mais
fácil o desenvolvimento e gerenciamento de aplicações complexas.

Atualmente no mercado existem inúmeras linguagens de programação baseadas no modelo orientado


a objeto, algumas delas são: Smalltalk, Python, Ruby, .Net, C#, C++ e Java.

Paradigma funcional

O Paradigma de Programação Funcional essencialmente desenvolve programas escritos em linguagem


definida por expressões, declarações e funções, considerando a computação como uma avaliação de
funções matemáticas. Oferece-nos também a possibilidade de programar onde podemos determinar
o que se pretende construir e não como será construído. Diferentemente o paradigma funcional não
utiliza o conceito de atribuição pelo fato de que os programas são formados por definições de funções.
Valores podem ser criados, mas não podem ser modificados. Este paradigma tem sido utilizado mais
academicamente do que no desenvolvimento profissional de software comercial. Veja alguns
exemplos de linguagens de programação baseadas no paradigma funcional: LISP, Scheme (Lisp
melhorado) ML, Miranda e Haskel

Paradigma lógico

O Paradigma de Programação Lógico é baseia-se na utilização de sentenças lógicas, utilizando-se da


lógica simbólica como linguagem para programação. Um dos pontos importantes são os objetos e
seus relacionamentos, onde se podem declarar vários fatos sobre estes, definindo regras e
questionamentos onde as respostas podem ser observadas através das regras e fatos.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 9 de 21


O paradigma lógico é bastante eficiente para exemplificar modelos de estruturas de dados e códigos,
simplificando ideias complexas, onde um problema pode ser mostrado por meio de relações sobre um
determinado conjunto de objetos.

O paradigma de programação lógico é bastante utilizado no campo da inteligência artificial, onde


através da programação lógica busca-se implantar a maneira da lógica matemática à programação de
computadores. O paradigma lógico elabora deduções imediatas com base em uma lista de premissas.

O Prolog é a principal linguagem de programação lógica. Este ganhou espaço no mercado com a
esperança nos sistemas baseados em técnicas de representação da inteligência artificial e do
conhecimento. Exemplos de linguagens baseadas no paradigma lógico (alguns deles baseados no
Prolog): Popler, Conniver, QLISP, Planner, Mercurry, OZ e Frill.

Conceitos de programação orientada a objetos

A programação orientada a objetos constitui uma mudança no processo de programação em relação


à forma como os sistemas3 eram vistos até então. Considera-se que a programação orientada a objetos
representa uma quebra de paradigma pois revoluciona os conceitos de projeto e desenvolvimento de
sistema existentes.

Sendo assim, um programa orientado a objetos será composto de objetos, cuja funcionalidade
especifica será exposta aos utilizadores e a implementação será oculta.

O enfoque da programação orientada a objetos procura observar o mundo como sendo um conjunto
de objetos que de certa forma interagem entre si e apresentam características e comportamentos
próprios que são representados por seus atributos e suas operações.

Os atributos relacionam-se aos dados e as operações aos procedimentos que um objeto executa. Para
melhor perceber esta relação vamos supor que pretendemos desenvolver uma aplicação de controle
estoque para uma loja de comércio. Primeiramente vamos identificar os objetos que podem estar ou
que se relacionam com esse sistema, como é o caso de produtos, pedidos de compra, recibos, pessoas,
entre outros. Assim, por meio da OO podemos modelar setores, departamentos ou até empresas
inteiras.

3Sistema- entende-se como um conjunto de programas inter-relacionados que atuam sobre um determinado conjunto de
dados que se deseja manipular de forma a obter resultados desejados.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 10 de 21


Classe
Programa
Atributo1
Processo1 Atributo2
Processo2 …
Operação1
Dados Operação2

Figure 1: Comparação: enfoque tradicional x enfoque orientado a objetos

A orientação a objetos não irá se preocupar com a forma como os objetos serão implementados, desde
que estes façam o que pretendemos.

Os pilares da Programação Orientada a Objetos

Para uma linguagem ser considerada OO ela precisa atender a quatro tópicos bastante importantes:

Abstração

A abstração consiste em um dos pontos mais importantes dentro de qualquer linguagem Orientada a
Objetos. Sendo que a OO trata da representação de um objeto real (o que dá nome ao paradigma),
temos de imaginar o que esse objeto irá realizar dentro de nosso sistema. Pode-se dizer que a abstração
foca-se no que o objecto é e faz antes de ser implementado em alguma linguagem de programação.

Na abstração devemos considerar três pontos principais:

• Atribuir uma identidade ao objeto que iremos criar. Essa identidade deve ser única dentro do sistema
para que não haja conflito. Na maior parte das linguagens, há o conceito de pacotes (ou namespaces);
• Identificar as características do objeto. No mundo real qualquer objeto possui elementos que o
definem. Dentro da programação orientada a objetos, essas características são nomeadas propriedades.
Por exemplo, as propriedades de um objeto “Cachorro” poderiam ser “Tamanho”, “Raça” e “Idade”.
• Definir ações que o objeto irá executar. Essas ações, ou eventos, são chamados métodos. Esses
métodos podem ser extremamente variáveis, desde “Acender()” em um objeto lâmpada até “Latir()”
em um objeto cachorro.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 11 de 21


Encapsulamento

O encapsulamento é uma das principais técnicas que define a programação orientada a objetos. O
encapsulamento é um dos elementos que adicionam segurança à aplicação em uma programação
orientada a objetos pelo fato de esconder as propriedades.

A maior parte das linguagens orientadas a objetos implementam o encapsulamento baseado em


propriedades privadas, ligadas a métodos especiais chamados getters e setters, que irão retornar e
atribuir o valor da propriedade, respetivamente. O encapsulamento evita o acesso direto a propriedade
do objeto, adicionando uma outra camada de segurança à aplicação.

Por exemplo, quando clicamos no botão ligar da televisão, não sabemos o que está acontecendo
internamente. Podemos então dizer que os métodos que ligam a televisão estão encapsulados.

Herança

O reuso de código é uma das grandes vantagens da programação orientada a objetos. Muito disso se
dá por uma questão que é conhecida como herança. A herança otimiza a produção da aplicação em
tempo e linhas de código.

Para percebermos a herança, vamos imaginar uma família composta por: a criança, por exemplo, está
herdando características de seus pais.

Os pais, por sua vez, herdam algo dos avós, o que faz com que a criança também o faça, e assim
sucessivamente.

Na orientação a objetos, a questão é exatamente assim, como mostra a Figura 2. O objeto abaixo na
hierarquia irá herdar características de todos os objetos acima dele, seus “ancestrais”. A herança a
partir das características do objeto mais acima é considerada herança direta, enquanto as demais são
consideradas heranças indiretas. Por exemplo, na família, a criança herda diretamente do pai e
indiretamente do avô e do bisavô.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 12 de 21


Figura 5: Exemplo de herança

Polimorfismo

Na natureza, vemos animais que são capazes de alterar sua forma conforme a necessidade, e é dessa
ideia que vem o polimorfismo na orientação a objetos. Como sabemos, os objetos filhos herdam as
características e ações de seus “ancestrais”.

Entretanto, em alguns casos, é necessário que as ações para um mesmo método seja diferente. Em
outras palavras, o polimorfismo consiste na alteração do funcionamento interno de um método
herdado de um objeto pai.

Por exemplo, temos um objeto genérico “Eletrodoméstico”. Esse objeto possui um método, ou ação,
“Ligar()”. Temos dois objetos, “Televisão” e “Congelador”, que não irão ser ligados da mesma forma.
Assim, precisamos, para cada uma das classes filhas, reescrever o método “Ligar()”.

Como o polimorfismo é um assunto que está intimamente conectado à herança, entender os dois
juntamente é uma boa ideia. Outro ponto é o fato de que as linguagens de programação implementam
o polimorfismo de maneiras diferentes.

O C#, faz uso de método virtuais (com a palavra-chave virtual) que podem ser reimplementados (com
a palavra-chave override) nas classes filhas. Em Java, apenas o atributo “@Override” é necessário.

A herança, pode trazer variações, como a presença de herança múltipla. Além disso, o encapsulamento
também é feito de maneiras distintas nas diversas linguagens, embora os getters e setters sejam
praticamente onipresentes.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 13 de 21


Objeto:

Em POO o conceito de objeto é um dos pontos mais importantes. Entende-se por objeto a extensão
do conceito de objeto do mundo real, em que se podem ter coisas tangíveis, um incidente (evento ou
ocorrência) ou uma interação (transação ou contrato).

Alguns exemplos de objetos são descritos a seguir:

• Aluno e professor: o aluno e o professor podem ser um objeto. Caso específico de objeto pode ser
o aluno João (na verdade constituem uma instância, como veremos mais adiante).
• Aulas, disciplina: as aulas e matrículas também são objetos embora não possamos tocar.

De forma a criar uma coerência, podemos agrupar os objetos em:

• Tangíveis: alunos, pessoas, mecânicos;


• Incidente: curso, aula;
• Interação: matrículas.

Figure 2: Grupo de objetos

Como identificar ou definir um objeto?

Quando se desenvolve uma nova aplicação um dos primeiros passos a seguir durante a fase de analise
de requisitos é a identificação dos objetos e suas classes. As dificuldades na identificação de objetos e
de suas classes são grandes. De forma a facilitar este processo de identificação convém que o
programador (na verdade este trabalho é realizado pelos analistas, mas nesta unidade curricular iremos
utilizar o termo programador de forma a facilitar) tenha o máximo de abstração 4possível. Pois a
identificação de possíveis objetos dependera fortemente do nível de abstração de quem for a fazer a
modelagem.

4 Abstração: foca-se nos aspetos considerado essenciais em uma determinada entidade ignorando suas propriedades
acidentais. De forma resumida, a abstração vai se focar apenas no que um objeto é e faz.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 14 de 21


Antes de identificarmos um objeto temos que ter uma noção de objeto, conseguimos isso através de
uma visualização. Podemos visualizar ou imaginar um objeto como algo que guarda no seu interior
dados ou informações a respeito de sua estrutura, os seus atributos, e possui operações descritas por
comportamentos.

Recorrendo às técnicas de analise orientada a objetos utilizada na prototipagem podemos obter


algumas interpretações sobre como escolher objetos. Assim temos:

• Entidades externas: é necessário identificarmos as entidades externas. Estas entidades serão aquela
que irao produzir e/ou consumir informações que o sistema utilizara.
• Eventos (ocorrências): estes acontecem no contexto de operações que o sistema ira realizar.
Exemplos de eventos podem ser: termino de envio de mensagens ou transferência de propriedades
entre objetos;
• Funções (papéis): descrevem funções que serão executadas por pessoas que irão interagir dentro
daquilo que e o contexto de operação do sistema. Temos como exemplo de funções, os gerentes,
vendedores, entre outros.
• Elementos (coisas): constituem a componente de domino de informação do sistema. Por exemplo:
relatórios, displays, impressoras, entre outros.
• Estruturas: representam uma classe de objetos ou grupo de classes que se relacionam aos objetos.
Exemplos: veículos de duas rodas, computadores entre outros.
• Lugares: descrevem o contexto do problema e as funções globais realizadas pelo sistema. Exemplo:
secretaria, receção.
• Unidades organizacionais: constituem os elementos pertinentes à organização. Exemplo: divisão,
Coisas;
secção, equipe. Entidades externa;
Lugares;

Nome do Objeto

Atributos

Operações

Figure 3: Objeto

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 15 de 21


Na programação para trabalharmos com a orientação a objetos precisamos ser capazes de identificar
as caraterísticas chave dos objetos:

• Comportamento do objeto: descreve o que podemos fazer ou que métodos aplicar utilizando este
objeto;
• Estado do objeto: define o estado ou a reação do objeto após aplicação de métodos;
• Identidade do objeto: descreve a forma como iremos distinguir um objeto de outro que poderia ter
o mesmo comportamento ou estado;

Todos os objetos são caraterizados por um comportamento ao qual denominamos por métodos. Com
isso os objetos que são instancia da mesma classe irão compartilhar alguma semelhança e partilhar o
mesmo comportamento (métodos).

Conceito de classes

Entende-se por classe, toda a coleção de objetos que podem ser descritos por um conjunto básico de
atributo e possuem operações semelhantes. Ou por outra, entende-se por classe, o modelo ou esquema
a partir do qual os objetos são criados.

Apesar da definição de classe referenciar que os objetos tem atributos e operações semelhantes, nem
todos os objetos que façam parte da mesma classe precisam de ter os mesmos atributos e operações.

Quando falamos de classes, devemos incluir o conceito de generalização. A generalização existe


quando um objeto é identificado com atributos e operações semelhantes. Entretanto, quando temos
o caso em que um objeto é constituído por uma classe de objetos, ou seja, dele podem derivar outros
objetos, estamos perante um caso de especialização. Uma ilustração de generalização e especialização
é apresentada na figura 4.

Veículos
Generalização

Especialização
Genera

Utilitário Esporte Passeio Passageiros


Figure 4: Exemplo de generalização e especialização

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 16 de 21


A criação de classes e suas especializações esta relacionado aos atributos e operações de seus objetos.
Com isso, seguindo exemplo de generalização e especialização, para a classe veículos, teremos
atributos genéricos, como por exemplo:

• Marca;
• Modelo;
• Ano de fabrico, entre outros;

Para além dos atributos semelhantes, também teremos operações semelhantes, como por exemplo:

• Incluir novo;
• Alterar dados;
• Selecionar dados;
• Excluir dados, entre outros;

Uma dica que pode nos ajudar na identificação de classes é procurarmos substantivos durante a analise
do problema. E para o caso dos métodos a dica é utilizar verbos.

Por exemplo, caso o estudante seja contratado para desenvolver um sistema de processamento de
encomendas, alguns substantivos que poderá encontrar são:

• Pedido;
• Pagamento;
• Conta;

Os substantivos acima podem nos ajudar na criação de classes. Para identificarmos métodos, temos
que procurar os verbos. Podemos ter os verbos:

• adicionar;
• enviar;
• cancelar;
• aplicar, entre outros.

Apesar das dicas de criação/identificar classes e métodos durante a analise do problema, somente a
pratica poderá nos ajudar a decidir os elementos importantes para criar as nossas classes .

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 17 de 21


Instância de objetos

Vimos que as classes são modelos que servem para geração ou criação de objetos com caraterísticas
definidas que funcionam como um padrão. Instanciar ou inicializar um objeto consiste em trazer uma
lógica escrita à um objeto armazenado na memória em tempo de execução. Há quem diga que instância
consiste num processo utilizado em linguagem Orientada a Objetos para criar uma cópia de um
determinado objeto

A palavra chave do java, usada para instanciar objetos, e de muitas outras linguagens é new. Vejamos
um exemplo:

Pessoa pesso1 = new Pessoa("25","João");

Um outro exemplo de instância é o seguinte:

Consideremos que a Toyota de Moçambique deseje modelar um sistema que comercializa veículos.
Assim, os veículos adquiridos seriam cadastrados de acordo com a sua classificação. Supondo que o
veículo seja um automóvel de passeio do tipo turismo, cria-se um novo objeto dessa classe. A este
objeto desta classe denominamos instância de objeto.

Classe veiculo veículos


Subclasse passeio passeio
Instancia Marca: Toyota Marca Nissan
Modelo: yaris Modelo: sentra
Ano:2015 Ano:2017
Carga:850 Carga: 900kg

Especificação de atributos de objetos

Entende-se por atributo a todo elemento que representa informação sobre um atributo que um
determinado utilizador esteja interessado em definir. Diz que um atributo é quem define o objeto e
esclarece o seu significado no contexto de um determinado problema.

Objeto: automóvel Objeto: pessoa


Atributos: Atributos:
Marca; nome;
Cor; data de nascimento;
Ano de fabric; cor dos olhos;

Figure 5: Objeto de dado e atributos


Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 18 de 21
Identificação de estruturas de herança

Na orientação a objetos devemos considerar a estrutura de herança. Dissemos anteriormente que uma
classe é constituída por objetos com atributos e operações semelhantes. A herança consiste na
implementação da generalização. Na herança temos compartilhamento de atributos e operações
entre classe com base numa relação hierárquica.

Quando criamos uma instancia de um objeto, diz em OO que o objeto criado “herda” de sua classe
os atributos e operações.

As classes de objetos derivadas são todas conectadas à classe básica. As classes objeto derivadas
contém atributos e serviços que são diferentes de outro objeto derivado. Classifica-se naquela base
objeto a classe que tenha os mesmos atributos ou que pode prover esses mesmos serviços.

O objeto derivado contém automaticamente todos os atributos e serviços especificados para a classe
de objeto básica por eles herdada. Um exemplo de estrutura de herança é ilustrado na figura seguinte.

Objeto: Sensor
Atributos:
Identificação;
Horário;
Posição;
Calibrar
Monitorar

Objeto: Sensor de Objeto: sensor de


Objeto: Humidade
vento temperatura
Atributos:
Atributos: Atributos:
humidade
Vel. Do vento temperatura

Figure 6: Exemplo de estrutura de herança


Na OO os códigos escritos na definição da classe, os atributos e as operações são aproveitados por
suas subclasses e instancias de objeto, isto reduz o numero de linhas de programação e gera melhor
qualidade de código e facilita a programação no que diz respeito a verificação de erros e correções.

Herança na orientação a objetos

A herança varia de linguagem para linguagem. Em algumas delas, como C++, há a questão da herança
múltipla. Isto, significa que o objeto pode herdar características de vários “ancestrais” ao mesmo

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 19 de 21


tempo diretamente. Em outras palavras, cada objeto pode possuir quantos pais for necessário. Devido
a problemas, essa prática não foi difundida em linguagens mais modernas, que utilizam outras
artimanhas para criar uma espécie de herança múltipla.

Relacionamento entre objetos

Os objetos dentro de um sistema se relacionam a outros objetos ou sistemas, assim há necessidade de


conhecermos os tipos de relacionamento que os objetos podem ter.

Na orientação a objetos, cada classe de objeto deveria ser conectada a pelo menos uma outra classe
de objeto. Assim, não deveria existir nenhum aglomerado desconectado de classes de objetos. As
classes de objeto que estiverem desconectado com a nossa aplicação, provavelmente pertencem a
outro sistema de aplicação. Atenção que apesar de isto existir, podemos ter exceções.

Caso tenhamos uma classe de objeto A que esteja relacionada com outro objeto classe B, as instancias
particulares de classe do objeto A terão conexões naturais com uma ou mais instancias de classe do
objeto B.

Por exemplo, para uma determinada classe: departamento e outra classe: empregado, se tivermos uma
instância particular de departamento será conectada a instâncias de empregado particulares para
empregados que são os membros daquele departamento.

Nas instâncias de objetos podemos ter três tipos de conexões de relação que são:

• Um-para-um: significa que para cada instancia de objeto de uma classe A, haverá uma
instância relacionada ao objeto da classe B;
• Um-para-muitos: significa que para cada uma das instancias de objeto de uma classe A,
poderá ter muitas instancias relacionadas com o objeto de classe B;
• Muitos-para-muitos: esta conexão de relação é considerada como sendo herança instável,
não comportando mudança elástica;

Uma das vantagens de se fazer o levantamento das relações em primeiro lugar é o facto de existirem
atributos críticos. Estes atributos devem ser revelados de forma a apoiar as relações especificadas.

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 20 de 21


Referencias

Elaborado e compilado por: MsC. Eng. Michael Karagianis Página 21 de 21

Você também pode gostar