Noções Básicas

Registo->Conjunto de dados numa dada entidade.

Tabela->Conjunto dos registos numa entidade.

Dados->Elementos que caracterizam uma entidade.

Campo->Características ou atributo individual.

Relação->Agrupamento de dados sem repetição.

Associação->Processo pela qual se ligam tabelas.

Funções de SGBD

Segurança:
  • Deve Proteger as BD de utilizadores não autorizados.

Integridade dos Dados:
  • Proteger BD de utilizadores autorizados evitando que executem tarefas que ponham em causa a integridade da informação.
  • Por ex.:apagar dados necessária ao bom funcionamento da BD.

Controlo e acesso dos utilizadores aos dados :
  •  Num sistema com muitos utilizadores a partilha de dados tem de ser feita de modo a que cada utilizador a use como se estive-se sozinho.

Recuperação a falhas:
  • Sempre que ocorrem falhas (ex.:disco hardware ou software), a SGBD tem de reconstruir a BD ate ao mesmo momento em que ocorreu a falha.
 

Modelo Comportamental

Modelagem da parte interior do sistema.

Desenvolvimento do DFD inicial:
      • é desenhado um processo para cada evento da lista de eventos
      • são desenhadas entradas e saídas para os processos, e os
depósitos para comunicação entre os processos
     • é desenvolvido o diagrama ER em paralelo ao dicionário de
dados inicial

Projeto Estruturado

Diagrama de Contexto: Sistema Emissão de Contra-Cheque


Modelo Ambiental

Define as interfaces entre o sistema e o ambiente, determinando o
que está dentro e fora do sistema.

Composto por:
• Declaração dos Objetivos
• Diagrama de Contexto: um caso especial do DFD, no qual uma
única bolha representa o sistema inteiro.
• Lista de Eventos: lista narrativa dos “estímulos” que ocorrem no
mundo exterior, e aos quais o sistema deve responder.

Análise Estruturada

É composto por dois componentes:

•Modelo Ambiental
• Modelo Comportamental

Análise Estruturada

Dicionário de Dados
Descreve as informações implícitas nos fluxos ou contidas nos
depósitos.

Especificação de Processo

      Especificação dos detalhes de um processo:
          ° linguagem estruturada
          ° condições pré/pós
          ° fluxograma
          ° linguagem narrativa

Análise Estruturada Moderna

Análise Estrutura utiliza:
•DFD
•Diagrama de Entidade-Relacionamento (ER)
•Dicionário de Dados
•Especificação de Processo

Análise Orientada a Objectos: divisão do problema em classes.
Análise Estruturada: divisão do problema em funções.

DFD

• Os dados são transformados em cada passo antes de mover para
o próximo estágio. Estas transformações são funções de programa.
• Os DFDs ajudam os analistas a entenderem o que acontece com
os dados durante a execução do sistema.
• Podem ser usados para mostrar como diferentes sistemas e
subsistemas trocam informações.

Exemplo de DFD: Sistema de Venda de CDs



DFD

Descreve o fluxo de informação e as transformações que são
aplicadas à medida que os dados se movimentam da entrada para
a saída.

Componentes de um DFD:

Processo: transforma entradas em saídas







Fluxo: dados em movimento



Depósito: dados em repouso








Entidade Externa: entidades com as quais o sistema se comunica










-Não representa a sequência de processamento, nem a lógica
procedimental.

Exemplo de Diagrama de Classes

Exemplo de Diagrama ER:


Modelos Estruturais

Definem a forma lógica dos dados processados pelo sistema.

Exemplos:
  •ER (Entidade-Relacionamento): mostra as entidades, atributos e
relacionamentos.
  •Modelo de Objeto: mostra as classes, atributos, operações e
métodos. Para modelar o comportamento dos objetos, são usados
diagramas de seqüência que mostram como as operações dos
objetos são usadas.

Modelos de Especificação

 Modelos Comportamentais
-Descrevem o comportamento geral do sistema.

Exemplos:

  •DFD: mostra como os dados são processados pelo sistema.
  •Diagrama de Estado: modela o comportamento de um sistema
em resposta aos eventos internos e externos. Mostram os estados
e eventos que causam transições de um estado para outro.

Diagrama de Fluxo de Dados (DFD)

Modelos para Especificação do Sistema

Representações gráficas que descrevem o problema a ser
resolvido e o sistema a ser desenvolvido.

Perspectivas usadas nestes modelos:
•Comportamental: o comportamento do sistema é modelado.
•Estrutural: a estrutura dos dados processados pelo sistema é
modelada.

-Pode-se usar uma combinação destes modelos.

Principais propriedades da classe Stream:

Principais propriedades da classe Stream:


Métodos mais úteis da classe Stream:

A classe stream

É abstracta , e por isso não pode ser instanciada directamente. Ao implementar uma classe derivada de Stream deverá fornecer-se implementações para os métodos Read e Write.


Exemplo de escrita em um arquivo texto: StreamWriter

Public Shared Sub Main() ' Cria uma instância de um StreamWriter para escrever para um arquivo Using sw As StreamWriter = New StreamWriter("Macoratti.txt") ' Inclui algum texto sw.Write("Este é um teste") sw.WriteLine("-------------------") ' Outros objetos podem ser escritos no arquivo sw.Write("Data : ") sw.WriteLine(DateTime.Now) sw.Close() End Using End Sub


A classe Stream é implementada pelas seguintes classes:

BufferedStream: Fornece uma camada no buffer noutro stream para aumentar o desempenho.
FileStream: Fornece uma forma de ler e escrever arquivos.
MemoryStream: Fornece um stream usando a memória como forma de armazenamento.

NetworkStream: Fornece uma forma de aceder a dados numa rede.
CryptoStream: Fornece uma forma de suprimir dados para uma operação de criptografia.

De forma geral operações com stream envolvem operações de leitura , escrita e procura. ( read, write , seek ).

Usar Streams envolve as seguintes operações fundamentais

Ler a partir de streams. A leitura é a transferência de dados de um stream numa estrutura de dados como um array de bytes;
Escrever para streams. A escrita é a transferência de dados a partir de uma estrutura de dados para um stream;
Streams podem suportar a procura. A procura é a consulta e modificação de uma posição actual no interior do stream. A capacidade de busca depende do stream.

Exemplo de leitura de um arquivo texto : StreamReader

Public Shared Sub Main() Try ' Cria uma instância de um StreamReader para ler um arquivo Using sr As StreamReader = New StreamReader("Macoratti.txt") Dim line As String ' Lê e exibe as linhas do aruquivo até o fim Do line = sr.ReadLine() Console.WriteLine(line) Loop Until line Is Nothing sr.Close() End Using Catch E As Exception ' Exibe mensagem de erro Console.WriteLine("O arquivo não pode ser lido") Console.WriteLine(E.Message) End Try End Sub

CLASSESTREAM

Define propriedades e métodos que permitem realizar operações genéricas com fluxo de bytes (streams) : ler , escrever, etc.

Nota: Um stream pode ser considerado um fluxo sequêncial de bytes com um arquivo, um dispositivo de entrada/saida, um processo de comunicação entre dois pontos ou um socket TCP/IP. (Após esta explicação eu vou continuar a usar a palavra stream na sua forma original sem tradução.)

Streams

O conceito de stream permite-nos abstrair-nos dos detalhes da estrutura de dados subjacente e utilizar um conjunto de métodos comum a vários tipos de streams.
Uma stream encapsula uma sequência de dados, frequentemente bytes.
Uma stream possui uma fonte e um destino.
Se um trecho de código escreve numa stream, ele é a fonte deste.
Se um trecho de código lê de um stream, ele é o destino deste.

Definição
Uma stream pode ser considerado um fluxo sequêncial de bytes com um arquivo, um dispositivo de entrada/saida, um processo de comunicação entre dois pontos ou um socket TCP/IP.
Usar Streams envolve as seguintes operações fundamentais:
Ler a partir de streams. A leitura é a transferência de dados de uma stream numa estrutura de dados como um array de bytes;
Escrever para streams. A escrita é a transferência de dados a partir de uma estrutura de dados para uma stream;

As Streams podem suportar a busca.
A busca é a consulta e modificação de uma posição actual no interior da stream.
A capacidade de busca depende da stream.
O StreamReader e StreamReader são duas classes para de manipular ficheiros de texto.
Veremos de seguida um exemplo.

Imports System
Imports System.IO

Module module1
Public Sub Main()
Try
escrever()
' Criar uma intância de uma streamreader para ler dum ficheiro.
Dim sr As StreamReader = New StreamReader("testfile.txt")
Dim line As String
'ler e escrever as linhas do ficheiro até ao fim deste
Do
line = sr.ReadLine()
Console.WriteLine(line)
Loop Until line Is Nothing
sr.Close()

Catch E As Exception
' mostrar ao utilizador o que correu mal
Console.WriteLine("The file could not be read:")
Console.WriteLine(E.Message)
Console.ReadKey()
End Try
Console.ReadKey()
End Sub

Public Sub escrever()
' Cria uma instância de uma StreamWriter para escrever num ficheiro
Dim sw As StreamWriter = New StreamWriter("testfile.txt")
' Inclui algum texto
sw.Write("Este é um teste")
sw.WriteLine("-------------------")
' Outros objectos podem ser escritos no ficheiro
sw.Write("Data : ")
sw.WriteLine(DateTime.Now)
sw.Close()

End Sub

POO Avaçanda - Excepções Continuação6

No Visual Basic .NET nós podemos criar as nossas próprias excepções.
Para isso apenas temos de criar classes que derivem da classe Exception

' Definir a classe que vai tratar o erro específico
Public Class MyParameterOutOfRangeException
Inherits Exception
Public Sub New( )
MyBase.New(“O valor passado em MyParameter " _
& " está for a de limite. O valor deverá estar entre
& " 10 e 100.")
End Sub
End Class
' ...
________________________________________________________

' Definição do método que possa disparar a nossa excepção
Public Sub SomeMethod(ByVal MyParameter As Integer)
' Assegurar que o argumento é válido.
If (MyParameter < 10) Or (MyParameter > 100) Then
Throw New MyParameterOutOfRangeException( )
End If
' Corpo do método
' ...
End Sub

Public Sub SomeCaller( )

Try
SomeMethod(500)
Catch e As MyParameterOutOfRangeException
' ...
End Try
End Sub

POO Avaçanda - Excepções Continuação5

Por vezes temos de garantir que certa parte do código é executado mesmo que tenha ocorrido uma excepção de forma a não comprometer a nossa aplicação.
Por exemplo se um ficheiro for aberto, este tem se ser fechado mesmo que ocorra uma excepção.
O bloco Try contém o bloco Finally para este propósito.
Este bloco de código é sempre executado haja ou não um excepção.

Dim s As System.IO.Stream =_
System.IO.File.Open("c:\test.txt", System.IO.FileMode.CreateNew)
Try
' Fazemos alguma coisa com o ficheiro.
' ...
Catch e As Exception
' Handle any exceptions.
' ...
Finally
‘A stream deverá ser fechada havendo ou não excepção
s.Close( )
End Try

O Visual Basic .NET pode intencionalmente tratar de excepções para indicar erros ou ocorrências invulgares.
Vejamos um exemplo em que existe um método que recebe valores nos argumentos, mas estes têm certos limites.
Este controlo é feito com a palavra throw.

POO Avaçanda - Excepções Continuação4

Message
É a mensagem associada à excepção. Geralmente é uma explicação da causa que gerou a excepção.
O tipo é String

Source
O nome da aplicação ou objecto onde a excepção ocorreu
O tipo é String

StackTrace
É uma representação textual da lista de instruções em que o programa se encontrava a quando da excepção.
O tipo é String.

TargetSite
É uma referência para um objecto do tipo da classe mãe que representa o método onde a execepção ocorreu. Se o sistema não conseguir obter nada então o seu valor será Nothing.
O tipo é String

ToString
Retorna a representação textual da excepção. Esta inclui o typo de excepção a mensagem e a StackTrace.

Quando ocorre uma excepção não é fácil retomar a execução do bloco de código que gerou a excepção, se isso for uma coisa importante, a solução é marcar o código de alguma maneira e fazer com que este volte a ser executado.
Em seguida apresenta-se um exemplo:

Dim bSuccess As Boolean = False

Do
Try
' Some code that is to be protected.
' ...
bSuccess = True

Catch e As Exception
' Some recovery action.
' ...
End Try

Loop Until bSuccess

POO Avaçanda - Excepções Continuação3

Pelo facto de todas as exepções derivarem do tipo Exception, as propriedades (atributos) e
métodos estão acessíveis em todos os tipos de excepção.
De facto a maioria dos tipos de excepções não definem novos métodos.
As propriedades mais importantes das excepções são:
—HelpLink
É o URL que liga a um ficheiro de ajuda que explica o erro em detalhe.
O tipo de dados é uma string

POO Avaçanda - Excepções Continuação2

A variável declarada logo a seguir ao catch é do tipo Exception.
Todas as expeções são representadas pelos tipos de que derivam, directa o indirectamente do
tipo excepção.

O as Type_name do bloco catch especifica o tipo de excepcção de que estamos a tratar e
este está associado ao bloco de instruções imediatamente abaixo.

Try
Dim x As Integer = 0
Dim y As Integer = 1 \ x
Catch e As System.DivideByZeroException
Console.WriteLine(e.Message)
End Try

—Neste exemplo estamos a tratar de uma excepção em concreto.

Podemos ainda tratar de várias excepções do mesmo bloco try

Try
Catch e As System.DivideByZeroException
' ...
Catch e As System.OverflowException
' ...
End Try

POO Avaçanda - Excepções Continuação

No visual Basic.NET os programas podem tratar das excepções.
Isto é possível colocando código com grande potencial de gerar excepções dentro de blocos Try…End Try
O exemplo seguinte mostra como poderemos tratar da excepção gerada por uma divisão por zero.

Try
Dim x As Integer = 0
Dim y As Integer = 1 \ x
Catch e As Exception
Console.WriteLine(e.Message)
End Try

Quando o programa tenta dividir o inteiro por zero ocorre uma excepção, então o programa salta para o bloco onde está o Catch e executa essa parte do código, sem que isso termine a execução do mesmo.

Se nenhuma excepção ocorrer dentro do bloco try, então o programa salta o bloco catch

POO Avaçanda - Excepções

Por vezes erros ou condições especiais levam a que um determinado programa pare de
funcionar.
Um exemplo clássico desta ocorrência é a divisão de um número por zero.

Dim x As Integer = 0
Dim y As Integer = 1 \ x
—Quando o programa lê a linha de código que contém a divisão de um nº inteiro por
zero ocorre um excepção.
—Uma excepção é uma ocorrência que não é considerada normal no correcto fluxo do
programa. Esta excepção é detectada e são tomadas as acções apropriadas.
Normalmente o programa aborta a sua execução.

POO Avançada

Conteúdos:
—Introdução ao conceito de Excepção
—Manipulação de Excepções
—Criação de Excepções próprias
—Introdução ao conceito de Stream
—Derivação de Streams

Módulo 11 : Sumário

Sumário:
Introdução ao Módulo 11 - Programação Orientada a Objectos Avançada.
ClasseStream.
Revisão da matéria Dada.

Tipo Abstracto de Dados

(TAD), permite a definição de tipo de dados que incluem um conjunto de variáveis e as
operações que o manipulam.

Da revolução do estado surge o conceito de orientação a objectos.
Um conceito comum a todas as linguagens que se reclamam como orientadas a objectos é o de encapsulamento.

Programação Orientada a Objectos

Formaliza o encapsulamento permitindo descrever um sistema um sistema em conjunto
de entidades ou objectos autónomos no sentido de que o funcionamento de um objecto
depende da estrutura interna de outros objectos.

Linguagem Simula - 67

É uma extensão do ALGOL 60.
Com o desenvolvimento da tecnologia de construção de workstations que permitem
ambientes de programação sostificados a computação OO teve rápida expansão
surgiram então as linguagens que se seguem: objective C, C++,Visual C++(extensões
da linguagem C) clos-common list system. Object Pascal, delfi que são extensões da
linguagem Pascal,Visual Basic.

Resumo !

A diferença importante da variação objectos em relação a programação convencional
ou procedimental consiste na capacidade de estender um sistema por simples adição do
novo código em situações onde com técnicas convencionais seria necessário modificar o
código anterior.

Enquanto a abstracção de dados permite adicionar novos conceitos

Características da programação Orientada a Objectos

Abstracção à (processo de formulário conceitos gerais por abstracção de propriedades
comum de exemplos específicos).

É uma ferramenta para manipular a complexidade quer na elaboração de modelos
conceptuais onde os conceitos gerais são identificados por um nome para abstrair

sobre atributos e comportamento.

Características da Programação Orientada a Objectos [Continuação]

Partilha de Comportamento: A abstracção de dados introduz o conceito de
comportamento de uma identidade como um conjunto de operações extremas dessa
entidade.

Evolução: Em computação os requisitos de um sistema evoluem rapidamente, logo
podemos considerar evolução como a necessidade de adicionar novas funcionalidades e
de notificar os já existentes.

Programação Orientada a Objectos [Objectivos]

¢Objectivos Gerais
—Herança e Polimorfismo
—Mensagens entre Objectos
—Redefinição de Métodos. Redefinição de Comportamento
—Métodos Virtuais e não Virtuais
—Diagramas de Classe
—Problemas de complexidade crescente, que justifiquem claramente a necessidade da utilização de mecanismos herança, polimorfismo e excepções


¢Objectivos Específicos/Competências
—Definir relações entre objectos.
—Conceito de Herança e Polimorfismo;
—Métodos Virtuais e Virtuais Puros;
—Representar esquematicamente diagramas de classes.

Programação Orientada a Objectos [breve História ]

O termo Programação Orientada a Objectos foi criado por Alan Kay, autor
da linguagem de programação Smalltalk.

Mas mesmo antes da criação do Smalltalk, algumas das ideias da POO já eram
aplicadas, sendo que a primeira linguagem a realmente utilizar estas ideias foi
a linguagem Simula 67, criada por Ole Johan Dahl e Kristen Nygaard em 1967.

O paradigma de programação já é bastante antigo, mas só agora vem sido
aceite realmente nas grandes empresas de desenvolvimento de Software.

Alguns exemplos de linguagens modernas utilizadas por grandes empresas
que adoptaram essas ideias:

¢Java, C#, C++, Object Pascal (Delphi), Ruby, Python, Lisp, ...

A maioria delas adopta as ideias parcialmente, dando espaço para o antigo
modelo de programação, como acontece no C++ por exemplo, onde temos a
possibilidade de usar POO, mas a linguagem não força o programador a
adoptar este paradigma de programação, sendo ainda possível programar da
forma tradicional.

Este tipo de linguagem segue a ideia de utilizar uma linguagem previamente
existente como base e adicionar-lhe novas funcionalidades.

Outras são mais "puras", sendo construídas do zero focando-se sempre nas
ideias por trás da orientação a objectos como é o caso das linguagens
Smalltalk, Self e IO, onde TUDO é orientado a objectos.

O que é Programação Orientada a objectos?

A programação Orientada a objectos (POO) é uma forma especial de
programar, mais próximo de como expressaríamos as coisas na vida real do
que outros tipos de programação.

Com a POO temos que aprender a pensar as coisas de uma maneira distinta,
para escrever os nossos programas em termos de objectos, propriedades
métodos e outras coisas que veremos mais à frente.

Durante anos, os programadores dedicaram-se a construir aplicações muito
parecidas que resolviam uma vez ou outra, os mesmos problemas.
Para conseguir que os esforços dos programadores possam ser utilizados por
outras pessoas foi criado a POO.

Esta é uma série de normas de realizar as coisas de maneira que outras
pessoas possam utilizá-las e adiantar seu trabalho, de maneira que
consigamos que o código possa reutilizar-se.

A POO não é difícil, mas é uma forma especial de pensar, às vezes subjectiva,
podendo ser diferente de programador para programador.
Embora possamos fazer os programas de formas distintas, nem todas elas
são correctas, o difícil não é programar orientado a objectos mas sim,
programar bem.

Programar bem é importante porque assim podemos aproveitar todas as
vantagens da POO.

Como se pensa em Objectos?

Pensar em termos de objectos é muito parecido como faríamos na vida real.

Por exemplo, um automóvel:
. O elemento principal é o automóvel, com uma série de características; cor, o modelo ou a marca.
. Bem como uma série de funcionalidades associadas; andar, parar, estacionar.
. Então num esquema POO o carro seria o objecto, as propriedades seriam as características como a cor ou o modelo e os métodos seriam as funcionalidades associadas como andar ou parar.

Por dar outro exemplo, vamos ver como faríamos um modelo em esquema POO de uma fracção, ou seja, essa estrutura matemática que tem um numerador e um denominador que divide o numerador, por exemplo, 3/2.

A fracção será o objecto e terá duas propriedades, o numerador e o
denominador.
Logo,poderia ter vários métodos como simplificar, somar com outra fracção ou
número, subtrair com outra fracção, etc.
Estes objectos poderão ser utilizados nos programas, por exemplo, num
programa de matemática seria feito o uso de objectos fracção e num programa
que administra uma oficina de carros, seria utilizado o uso de objecto carro.

OS programas Orientados a objectos utilizam muitos objectos para realizar as
acções que se desejam realizar e eles próprios também são objectos.

Ou seja, a oficina decarros será um objecto que utilizará objectos carro,
ferramentas, mecânico, trocas, etc.

Classes em POO

As classes são declarações de objectos, também se poderiam definir como abstracções de objectos. Isto quer dizer que a definição de um objecto é a classe.

Quando programamos um objecto e definimos a suas características e funcionalidades na verdade o que estamos a fazer é programar uma classe.

Nos exemplos anteriores, na verdade falávamos das classes carro ou fracção porque somente estivemos definindo, embora por alto, a suas formas.

Propriedades & Métodos das Classes

Propriedades das classes
—As propriedades ou atributos são as características dos objectos.
—Quando definimos uma propriedade normalmente especificamos seu nome e seu tipo.
—As propriedades são algo semelhantes às variáveis onde armazenamos os dados relacionados com os objectos.

¢Métodos nas classes
—São as funcionalidades associadas aos objectos.
—Os métodos são como funções que estão associadas a um certo objecto.

Objectos em POO

Objectos em POO
—Os objectos são exemplares de uma classe qualquer. Quando criamos um exemplar temos que especificar a classe a partir da qual se criará.
—Esta acção de criar um objecto a partir de uma classe chama-se instanciar.
—Por exemplo, um objecto da classe fracção é por exemplo, 3/5. O conceito ou definição de fracção seria a classe, mas quando já estivermos a falar duma fracção em concreto, por exemplo 4/7, 8/1000 ou qualquer outra, chamamos de objecto.

¢Criação de objectos
—Para criar um objecto temos que escrever uma instrução especial que possa ser distinta dependendo da linguagem de programação que se empregue, mas será algo parecido a isto:

meuCarro = new Carro()
—Com a palavra new especificamos que queremos criar uma instância da classe que continua a seguir.
—Dentro dos parênteses poderíamos colocar parâmetros com os quais se inicia o objecto da classe carro.

Estados em Objectos

Quando temos um objecto as suas propriedades tomam valores. Por exemplo, quando temos um carro a propriedade cor tomará um valor em concreto, como por exemplo, vermelho, cinza. O valor concreto de uma propriedade de um objecto se chama estado.
—Para aceder a um estado de um objecto para ver o seu valor ou mudá-lo utiliza-se o operador ponto.

meuCarro.cor = “vermelho”
—O objecto é meuCarro, logo colocamos o operador ponto e por último o nome da propriedade a qual desejamos aceder. Neste exemplo, estamos a alterar o valor do estado da propriedade do objecto para vermelho com uma simples atribuição.

Mensagens em Objectos

Uma mensagem num objecto é a acção de efectuar uma chamada a um método.
—Por exemplo, quando dizemos ao objecto carro para andar, estamos a passar-lhe a mensagem "ande".
—Para enviar mensagens aos objectos utilizamos o operador ponto, seguido do método que desejamos utilizar.
ex:
meuCarro.andar()
—Neste exemplo, passamos a mensagem andar(). Deve-se colocar parênteses assim como com qualquer chamada a uma função.

Herança

Voltando à ideia das classes na Biologia: um ser humano é um animal. Ele tem todas as características (atributos) e pode realizar todas as acções (métodos) de um animal.

—Mas além disso, ele tem algumas características e acções que só ele pode realizar.
—Em momentos como este, é utilizado a herança.
—Uma classe pode estender todas as características de outra e adicionar algumas coisas a mais. Desta forma, a classe SerHumano será uma especialização (ou subclasse) da classe Animal.
  • A classe Animal seria a classe pai da SerHumano, e logicamente, a classe SerHumano seria a classe filha da Animal.
  • Uma classe pode sempre ter vários filhos, mas normalmente as linguagens de programação orientadas a objectos exigem que cada classe filha tenha apenas uma classe pai.
  • A linguagem C++ permite que uma classe herde as características de várias classes (herança múltipla), mas C++ não é um bom exemplo quando se está falando sobre conceitos de POO.

Os metodos são análogos

¢

Poderíamos criar alguns métodos na classe Pessoa e criar mais alguns métodos nas classes PessoaJuridica e PessoaFisica.
 
—No final, todos os objectos teriam os métodos especificados na classe Pessoa, mas só os objectos do tipo PessoaJuridica teriam os métodos especificados dentro da classe PessoaJuridica, e objectos do tipo PessoaFisica teriam os métodos especificados na classe PessoaFisica.

Polimorfismo

Um dos conceitos mais complicados de se entender, e também um dos mais importantes, é o Polimorfismo.

—O termo polimorfismo é originário do grego e significa "muitas formas".

—Na orientação a objectos, isto significa que um mesmo tipo de objecto, sob certas condições, pode realizar acções diferentes ao receber uma mesma mensagem.

—Ou seja, apenas olhando o código fonte não sabemos exactamente qual será a acção tomada pelo sistema, sendo que o próprio sistema é que decide qual o método que será executado, dependendo do contexto durante a execução do programa.

Resumindo:

Uma classe abstracta é um conjunto de informações a respeito de uma colecção de outras classes.Uma classe abstracta sozinha é completamente inútil, já que não podemos instanciar um objecto desta classe, apenas podemos instanciar objectos de classes que estendem a classe abstracta inicial.Ela serve apenas para simplificar o sistema, juntando num único local diversas características que são comuns a um grupo de classes.Não esquecer : Nunca poderemos criar um objecto do tipo de uma classe abstracta.Crie sempre objectos das classes que estendem esta classe abstracta.

Encapsulação

A Encapsulação é a capacidade de separar a implementação da interface de uma classe, do código que torna possível essa implementação.
—Isto realmente seria uma espécie de abstracção, não nos interessa como está implementada uma classe, mas sim, como ela funciona.
—Quando falamos em implementação falamos dos elementos dessa classe, nomeadamente os métodos, as propriedades e os eventos.

Objectos em Visual Basic.NET

—Visual Basic.NET é uma linguagem de programação totalmente orientada a objectos e com suporte total a UML, criada pela Microsoft e distribuída com o Visual Studio .NET (Versão seguinte ao Visual Basic 6.0), embora hoje já haja o Visual Basic 2008.

—O Visual Basic.NET é um produto extremamente diferente do antigo Visual Basic 6.0, não podendo ser considerada uma versão seguinte.

—Não apenas a maneira de programar foi alterada, mas todo conceito de orientação a objectos trouxe poder para a linguagem.

A Microsoft simplesmente descontinuou o antigo Visual Basic 6.0 tornando o produto parecido com as demais linguagens do Visual Studio, parecido em questões de recursos e portabilidade pois o Visual Basic.NET ainda é muito diferentes de linguagens como o Visual C++, C#, etc.  Porém esta nova versão aproximou o Visual Basic.NET das grandes linguagens de programação, aumentando a aceitação dos programadores Java e até mesmo C++, embora programadores Java caso tenham que migrar para plataforma Microsoft preferem o C#.
Apesar da linguagem ser parecida com o antigo Visual Basic 6.0 a migração destes programadores para a nova plataforma e utilização do Visual Basic.NET é mais fácil para programadores que utilizam linguagens orientada a objecto por causa da grande diferença. Os programadores do antigo Visual Basic 6.0 acostumados com a orientação a eventos encontram algumas dificuldades para utilizar o Visual Basic.NET.
Mas que vamos conseguir superar J !

Pilares da programação

¢Como já falamos anteriormente os três principais pilares da programação por objectos são:
—Herança
—Polimorfismo
—Encapsulação

Criar uma classe:
—Da maneira como existem formas de definir uma variável também existem formas de definir classes. —Usando a palavra Class seguida do nome que a identificará:

Class cliente 
aqui colocaremos os elementos da classe. 
End Class

¢Definir os membros de uma classe

Class Cliente
Public Nome As String
Sub Mostrar()
Console.WriteLine(“O nome do Cliente: {0}", Nome)
End Sub
End Class

—Neste caso a linha Public Nome As String ficaria definido como uma propriedade da classe com acesso público, ou seja pode ser acedida através de outras classes.
¢O método Mostrar() é outro elemento da classe que permite visualizar o conteúdo da propriedade nome.
¢Esta é a forma mais simples de definir uma classe e é assim que sempre iremos fazer.

Criação de objectos a partir de classes

—Para a criação de objectos de classes usamos a palavra reservada new()

Dim cli As New Cliente()

—Desta forma é criado em memória um objecto do tipo cliente.

¢Para aceder ao elementos de uma classe:

cli.Nome = “Travassos”

—Desta forma colocamos um valor no elemento nome do objecto cli que pertence à classe cliente.

¢Para acedermos ao método da classe faríamos da seguinte forma:

Cli.mostrar()

Como usar o Polimorfismo

Sub Main()
Dim cli As Cliente
Dim cliM As New ClienteMor ()
cliM.Nome = "Pepe"
cliM.idade= 30
cli = cliM
Console.WriteLine("Usando Mostrar da classe Cliente")
cli.Mostrar()
Console.WriteLine("Usando Mostrar da classe ClienteMor")
cliM.Mostrar()
Console.WriteLine(“A idade do Cliente mor é : {0}", cliM.idade)
Console.ReadLine()
End Sub

¢No programa declaramos uma variável do tipo da classe cliente, no entanto não foi criado nenhum objecto dessa classe.
¢Depois criamos um objecto da classe Clientemor.
¢Depois atribuímos a variável cli o mesmo objecto da variável cliM.
¢Como a variável cli é do tipo cliente apenas se poderá ter acesso aos elementos existentes nessa classe.
¢Note-se ainda que sempre que alteremos o valor da propriedade nome em cli, este valor também é alterado em CliM.

Redefinição de métodos (Overriding)

—Existem classes que derivam de outras através de herança.
—Em POO, nessas classes pode-se redefinir os seus métodos, ou seja pode-se alterar o método da classe principal.
—Regras:
Public Overridable Sub escrever()
Devemos escrever overridable no método que queremos alterar.
Na classe derivada devemos usar a palavra Overrides
Public Overrides Sub escrever(ByVal a As String)

Module Module1
'este é um exemplo de overriding ou redefinição de métodos
Class classe_base ' Esta é a classe principal
Public Overridable Sub escrever()
Console.WriteLine("Mensagem da classe principal")
End Sub
End Class
Class Classderivada1 'esta é a aclasse que redefine o método escrever
Inherits classe_base
Public Overrides Sub escrever()
Console.WriteLine("mensagem da classe que redefiniu o metodo")
End Sub
End Class

Class Classderivada2 'esta é uma classe que deriva da principal
Inherits classe_base
End Class
Sub Main()
Dim a As New classe_base()
Dim b As New Classderivada1()
Dim c As New Classderivada2()
a.escrever()
b.escrever()
c.escrever()
Console.ReadKey()
End Sub
End Module

Polimorfismo

¢O polimorfismo permite ter vários métodos com o mesmo nome (identificador), mas com assinaturas diferentes, ou seja com parâmetros distintos, quer em tipo de dados quer em quantidade.
—Regras:
—Devemos utilizar a palavra reservada Overloads antes do nome do método.

Public Overloads Sub escrever(ByVal a As String)


Module Module1
'este é um exemplo de Polimorfismo de classes
Class classe_base ' Esta é a classe principal
Public Sub escrever()
Console.WriteLine("Mensagem da classe principal")
End Sub
End Class
Class Classderivada1 'esta é a aclasse que redefine o método escrever
Inherits classe_base
Public Overloads Sub escrever(ByVal a As String)
Console.WriteLine(a)
End Sub

Public Overloads Sub escrever(ByVal a As String, ByVal b As Integer)
Console.WriteLine(a & b)
End Sub
End Class
Sub Main() ‘ programa principal
Dim a As New classe_base()
Dim b As New Classderivada1()
Dim c As New classe_base()
a.escrever()
b.escrever()
b.escrever("Escrever algo da classe derivada")
b.escrever("é o numero", 5)
c.escrever()
Console.ReadKey()
End Sub
End Module

Diagramas de Classes

¢Os Diagramas de Classes
—Estes diagramas servem para representar sistemas informáticos ou de outro tipo de uma forma gráfica.

POO

A Programação Orientada a Objectos pretende modelar os problemas aproximando-os da vida real e dos objectos que vemos no dia a dia, consiste em ver um programa como um conjunto de entidades, que interagem entre si através do uso de mensagens.
Cada objecto é definido por um grupo de atributos e por métodos que disponibiliza para o exterior, estes métodos definem o seu comportamento. Se pensarmos numa lâmpada eléctrica, o seu comportamento mais simples será o de ligar e desligar e o seu atributo será o estado, que pode ser “ligado” ou “desligado”.

Estes objectos podem assim ser considerados pequenas caixas pretas cuja implementação não interessa para os outros objectos, apenas a forma como podem comunicar é importante, pegando na nossa lâmpada, não interessa saber que é a passagem de corrente eléctrica pelo filamento metálico no interior que provoca a sua incandescência e a luz associada, apenas que ao dizermos à lâmpada para se ligar, ela produz luz.
Em POO traduzir um problema real para programação torna-se mais fácil e natural uma vez que os objectos possuem muitas vezes semelhanças com objectos reais.

Conceitos em Base POO

Apesar de se falar sempre em objectos, e de se pensar em objectos, ao programar-se e desenhar-se o nosso sistema, usam-se classes, que embora estejam intimamente ligadas aos objectos, não significam a mesma coisa. Esta distinção pode ser algo estranha de perceber.
Chama-se a uma classe a representação, o esquema, a planta ou até, o molde do objecto. A classe define o comportamento do objecto, os seus atributos, a relações que estabelece com outros objectos, mas é apenas uma representação.

Pode-se ver isso como o molde de uma lâmpada, embora o molde dê forma à lâmpada, não é uma lâmpada. Usam-se as lâmpadas no dia a dia, não os seus moldes, mas precisa-se de um molde para criar todas as lâmpadas que se compram.

Ao programar está a fazer-se o mesmo processo, defini-se um objecto através da construção da classe, essa construção é feita através de código, onde dizemos que uma lâmpada pode ter uma cor, pode ter um método que permita acender, etc.
Um objecto, em contrapartida, existe em memória, contém valores no seus atributos, exprime um estado no nosso sistema. Não se pode dizer se a classe Lâmpada está acesa, mas pode-se dizer se o objecto lampada1 está aceso, e podemos até enviar-lhe uma mensagem para que se desligue.

Objecto ou Instância

Objecto ou instância é o mesmo, obtém-se uma lâmpada através do processo de instanciação, daí poder-se dizer que o que tem é um objecto ou uma instância da classe Lâmpada.
É aconselhável, para não causar confusão, usar sempre “objecto” para referir a um elemento com estado, que existe em memória no computador durante a execução da aplicação. Evitar usar a palavra instância.

Herança

A herança, tal como na vida real, é o processo pelo qual as classes ganham características dos seus pais.
Embora, tal como na vida real, uma classe deva sempre introduzir comportamento e características próprias. Através do mecanismo de herança é possível criar relações entre diferentes classes e reutilizar código, é um mecanismo muito importante em linguagens POO.

Encapsulamento

Tal como na vida real em que a maioria de nós não sabe que uma lâmpada de halogéneo contém no seu interior um filamento de tungsténico selado num invólucro compacto e transparente, cheio com um gás inerte, como por exemplo o bromo, também aos objectos não interessa saber a forma como outros objectos são construídos.
Por encapsulamento consideramos o processo de manter como privada a estrutura interna dos nossos objectos. Não se trata de esconder o código que constituí as nossas classes de outros programadores, trata-se sim, de não dar acesso aos estados internos do objecto a outros objectos diferentes.
O encapsulamento é conseguido através dos modificadores de acesso private, protected, default e public. Estes modificadores, do mais restrito para o mais permissivo, permitem restringir o acesso ao comportamento ou característica no qual são aplicados.

Assim, objectos que não possuam relações de herança só podem comunicar através de métodos públicos, quando existem relações de herança, é possível aos descendentes acederem aos métodos e atributos protegidos. Elementos definidos como privados apenas podem ser acedidos pelo próprio objecto.


O encapsulamento tem também o efeito de impedir que um programador mais preguiçoso baseie a sua implementação no conhecimento que tem de outro objecto, isto porque é possível, com um bom esquema de encapsulamento, definir apenas o comportamento importante para o exterior como visível e esconder outros pormenores que não sejam tão importantes. Iremos ver um exemplo desta situação quando aplicarmos POO ao Java na secção seguinte.

Polimorfismo

Polimorfismo é a capacidade de um objecto redefinir o comportamento herdado, alterando assim a forma de responder à mensagem que o seu pai definiu mas sem alterar a interface de comunicação.
O polimorfismo, juntamente com a herança, possibilita a reutilização e redefinição de código por parte de classes filhas mantendo ao mesmo tempo o contracto que os seus pais definiram.

Usamos polimorfismo quando, através de uma relação de herança, um descendente implementa de forma diferente, um comportamento que herdou de um pai.

Composição

Composição pode não ser considerado por alguns autores como sendo uma das bases de POO, no entanto é importante que seja mencionada.
Composição não é mais que a criação de classes usando como base outras classes. Criamos assim uma relação entre objectos em que um determinado objecto contém no seu interior outros objectos que criamos.

De uma forma genérica poderemos pensar que estamos sempre a trabalhar com composição, afinal, todas as classes que criamos contém no seu interior alguma outra classe, mas o termo aplica-se mais quando estamos a falar de classes criadas por nós no domínio do problema que estamos a tentar resolver e não às classes que constituem a base da plataforma Java.

Composição aparece frequentemente associada a herança, surgindo em discussões de Herança Vs. Composição. A questão é que o mecanismo de herança, apesar de extremamente útil e poderoso, acarreta pequenos problemas, nomeadamente questões de performance. Embora a questão da performance não seja a única, é de longe a mais invocada nas comparações.

Conceito Polimorfismo

->O termo polimorfismo é originário do grego e significa "muitas formas" (poli = muitas, morphos = formas).

->Na programação orientada a objectos, o polimorfismo permite que referências de tipos de classes mais abstractas representem o comportamento das classes concretas que referenciam.
žAssim, um mesmo método pode apresentar várias formas, de acordo com seu contexto.

->O polimorfismo é importanjavascript:void(0)te pois permite que a semântica de uma interface seja efectivamente separada da implementação que a representa.

O autor Deitel, no livro "Programando em Java", diz que "quando utilizamos a herança para criar uma classe a partir da classe existente, a nova classe herda os atributos e comportamentos dessa classe existente, podendo adicionar atributos e comportamentos para solucionar nossas necessidades".
O polimorfismo condiz com a reutilização de código: é um facto que ocorrem funções semelhantes em várias partes do software; então definimos estas funções numa biblioteca, e todas as outras funções que dela precisarem poderão chamá-la sem a necessidade de reescreve-la.

Java a história parte3

A tecnologia Java tinha sido projectada para mover-se através de redes de dispositivos heterogéneos, redes como a Internet. Agora aplicações poderiam ser executadas dentro dos Browsers nos Applets Java e tudo seria disponibilizado pela Internet instantaneamente. Foi o estático HTML dos Browsers que promoveu a rápida disseminação da dinâmica tecnologia Java. A velocidade dos acontecimentos seguintes foi assustadora, o número de utilizadores cresceu rapidamente, grandes empresas, como a IBM anunciaram suporte para a tecnologia Java.

Desde o seu lançamento, em Maio de 1995, a plataforma Java foi adoptada com uma rapidez superior a todas as outras linguagens de programação na história da computação.
Em 2003 Java atingiu a marca de 4 milhões de programadores em todo mundo. Java continuou e continua a crescer e hoje é com certeza um padrão para o mercado oferecendo qualidade, desempenho e segurança ainda sem nenhum rival a altura.
Java tornou-se popular pelo seu uso na Internet e hoje possui um ambiente de execução em web browsers, mainframes, SOs, telemóveis, entre outros.

Java a história parte2

O *7 tinha a possibilidade de controlar diversos dispositivos e aplicações. “James Gosling” especificou uma nova linguagem de programação para o *7. “Gosling” decidiu denominá-la de “Oak”.

O próximo passo era encontrar um mercado para o *7. A equipa achava que uma boa ideia seria controlar televisões e filmes. Eles construíram um demo a que deram o nome “MovieWood”, mas infelizmente era muito cedo para que os filmes por encomenda assim como as empresas de TV por cabo pudessem rentabilizar o negócio. A ideia que o *7 tentava vender naquela altura, é hoje realidade em programas interactivos e também na televisão digital.

Permitir ao telespectador interagir com a programação numa grande rede por cabo, era algo muito visionário e estava muito longe do que as empresas de TV por cabo tinham capacidade de entender e comprar. A ideia certa, na época errada.

A sorte é que o boom da Internet aconteceu, e rapidamente estabeleceu-se uma grande rede interactiva. Era este tipo de rede interactiva que a equipa do *7 estava a tentar vender ás empresas de TV por cabo. Deixou então de ser necessário construir uma infra-estrutura para rede. “Gosling” foi incumbido a tarefa de adaptar o “Oak” para a Internet e em Janeiro de 1995 foi lançada uma nova versão do “Oak” que foi denominada de Java.

Java a história parte1

Em 1991, a Sun Microsystems, iniciou o “Green Project”, o ponto de partida de uma linguagem de programação orientada a objectos denominada “Java”.

Os mentores do projecto eram “Patrick Naughton”, “Mike Sheridan”, e “James Gosling”

O objectivo do projecto não era a criação de uma nova linguagem de programação, mas antecipar e planear a “próxima era” do mundo digital. Eles acreditavam que no futuro iria existir uma convergência dos computadores com os equipamentos e electrodomésticos usados pelas pessoas no seu dia-a-dia.

O protótipo chamava-se 7 (“StarSeven”), um controlo remoto com uma interface gráfica “touchscreen”. Para o 7 foi criado uma mascote, hoje amplamente conhecido no mundo Java, o “Duke”.
O trabalho do “Duke” no 7 era ser um guia virtual ajudando e ensinando o utilizador a utilizar o equipamento.

Java algumas noções part1

A plataforma Java é o nome dado ao ambiente computacional, ou plataforma, da empresa norte-americana “Sun Microsystems”. O programador cria aplicações para este ambiente através da linguagem de programação Java e de um conjunto de ferramentas de desenvolvimento. Neste caso, a plataforma não se refere a um sistema operativo ou hardware específico, mas a um programa chamado de máquina virtual, e um conjunto de bibliotecas que disponibilizam funcionalidades comuns.

A plataforma Java é formada por outras três plataformas que foram criadas para segmentos específicos de aplicações:

Java SE (Java Platform, Standard Edition).

É a base da plataforma; inclui o ambiente de execução e as bibliotecas comuns.


Java EE (Java Plataform, Enterprise Edition).

A edição voltada para o desenvolvimento de aplicações empresariais.


Java ME (Java Platform, Micro Edition).

A edição para o desenvolvimento de aplicações para dispositivos móveis.

Java algumas noções part2

A plataforma Java é constituída por um grande número de tecnologias, cada uma contém uma parte distinta de todo o ambiente de desenvolvimento e execução de software. Os utilizadores finais, interagem com a máquina virtual Java (Java Virtual Machine, ou JVM) e um conjunto padrão de bibliotecas de classe.

Existe uma grande variedade de formas de utilizar uma aplicação Java, incluindo applets embutidas em páginas web, aplicações para utilização em computadores, aplicações em telemóveis e em servidores de Internet.

Java Virtual Machine

O “coração” da plataforma Java é o conceito de um processador "virtual", que executa os programas formados por bytecodes Java. Este bytecode é o mesmo independentemente do hardware ou sistema operativo em que o programa é executado. A plataforma Java disponibiliza a JVM, que traduz, em tempo de execução, o bytecode para instruções nativas do processador. Isto permite que uma mesma aplicação seja executada em qualquer plataforma que possua uma implementação da máquina virtual.

Desde a versão 1.2 da JRE, a implementação da Sun da JVM inclui um compilador just-in-time (JIT). Com este compilador a totalidade do bytecode de um programa é transformado em instruções nativas e carregado na máquina virtual numa única operação, permitindo um ganho no desempenho superior a implementação anterior, onde as instruções em bytecode eram interpretadas uma a uma. O compilador JIT pode ser projectado de acordo com a plataforma ou hardware de destino, e o código que ele gera pode ser optimizado com base na observação de padrões de comportamento dos programas.
A plataforma Java não é a primeira plataforma baseada numa máquina virtual, mas é de longe a mais conhecida e a que alcançou maior sucesso. Anteriormente esta tecnologia era utilizada na criação de emuladores para auxílio a projectos de hardware ou de sistemas operativos. A plataforma Java foi desenhada para ser totalmente implementada em software, permitindo assim a sua migração de uma forma fácil para todos os tipos de plataformas e de hardware.

O que é o Java?

Java é uma linguagem apoiada por um paradigama de programação chamado Programação Orientada a Objectos, sem o qual não é possível programar em Java. Como não espero que leiam os textos que indiquei, farei um pequeno resumo...

O que é isso de POO?

Conceito geral de Programação Orientada a Objectos
A Programação Orientada a Objectos consiste em ver um programa como um conjunto de entidades, os objectos, que interagem entre si através do uso de mensagens.
Cada objecto é definido por um grupo de atributos e por métodos que disponibiliza para o exterior.
Podem assim ser considerados pequenas caixas pretas cuja implementação não interessa para os outros objectos, apenas a forma como podem comunicar é importante.
Em POO traduzir um problema real para programação torna-se mais fácil e natural uma vez que os objectos possuem muitas vezes semelhanças com objectos reais.
Java não é, no entanto, uma linguagem orientada a objectos pura uma vez que possui tipos de dados primitivos que não são objectos.

Para que todos falemos a mesma língua.

Package; Forma de organizar as classes ou outros recursos do programa, como imagens e ficheiros, por semelhanças, seja por categorias, funcionalidades ou outras.
Um package pode conter outros dentro e por convenção o seu nome é em minúsculas.

Classe; Abstracção que define um objecto. Consideremos uma classe como um molde. Uma classe é normalmente definida num ficheiro mas um ficheiro pode ter outras classes definidas, que se chamam Classes Anónimas e Classes Internas. Estes últimos dois nomes são traduzidos de "Nested Class" e de "Inner Class" e por isso podem ver outras traduções.

Objecto ou instância; Resultado do molde ou classe ao qual foram aplicados valores. A classe String define um conjunto de caracteristas que qualquer 'string' possui. Em contrapartida "Knitter" pode ser o objecto resultante da classe String. Um objecto ou instância possui valores específicos, memória associada, referência, etc.

Java definições:

Método; Capacidades do objecto de onde se salientam as formas de comunicação do mesmo. Os métodos podem ser de instância, na medida em que afectam apenas o objecto sobre o qual se invocou o método ou de classe afectando todas as instâncias da classe presentes.

Herança; Processo pelo qual os objectos ganham caracteristicas dos seus pais. Mas uma subclasse pode e deve introduzir comportamento e características próprias. Uma classe em Java é sempre subclasse de outra, por defeito da classe Object.
Encapsulamento; Conceito que permite esconder os detalhes de implementação de determinada classe. Os métodos e atributos de uma classe podem ser públicos, protegidos[1] ou privados dependendo se estão disponíveis para todas as outras classes, apenas subclasses, ou apenas na própria classe, respectivamente.Caso não seja especificado o tipo de acesso de determinado atributo/método, o Java assume que ele se encontra acessivel à própria classe e a classes no mesmo package.

Polimorfismo; Polimorfismo é a capacidade de um objecto redefinir o comportamento herdado provendo assim o aparecimento de duas classes que respondem de formas diferentes à mesma mensagem. Isto é, a classe Object possui um método chamado toString que transforma em String o nome da classe e alguns outros parâmetros. Ao criar a classe MeuObjeto posso redifinir o método para que apresente qualquer texto que eu queira. Ao ser invocado o método nos dois objectos, a mesma mensagem, produz efeitos diferentes.

UML - Diagrama de Classes

Poderia-se começar a dar de cara a definição do que é um diagrama de classes , mas creio que é preciso falar sobre o conceito de classes , mas para isto é preciso falar sobre o que são objetos...
Estou a falar para programadores e analistas , certo !!! Então o foco e área de actuação será a
Programação Orientada a Objectos. (POO)
Em POO , os problemas de programação são pensados em termos de objetos , nada de funções , rotinas , nada disto , o assunto são os objetos , propriedades e métodos.
Nota: A preocupação da programação estruturada estava em procurar os processos que envolviam o
problema e não os objectos que o compunham.
Desta forma quando é colocado o problema de desenvolver um sistema para locadoras , por exemplo , devemos pensar como dividir o problema em objetos. Para este caso podemos ter os seguintes objetos : Clientes , CDs e Fitas , etc..
A melhor maneira de conceituar estes termos é considerar um objeto do mundo real e mostrar como podemos representá-lo em termos conceitos para POO.
Começando com as definições : "Um objeto é um termo que usamos para representar uma entidade do mundo real" (Fazemos isto através de um exercício de abstração.)
Vou usar como exemplo o meu cachorro Bilu. Posso descrever o Bilu em termos de seus atributos físicos: é
pequeno , sua cor principal é castanha , olhos pretos , orelhas pequenas e caídas, rabo pequeno , patas
brancas.
Posso também descrever algumas ações que ele faz (temos aqui os métodos) : balança o rabo quando chega
a casa , foge e deita-se o mando-o sair debaixo da mesa, ladra quando ouve um barulho ou vê um cão ou
gato, e corre quando o chamo pelo nome. Temos abaixo a representação do Bilu.

UML - Diagrama de Classes Continuação

Temos aqui a representação de um objeto , no caso o meu cachorro Bilu , que
possui as seguintes propriedades e métodos:
Propriedades : Cor do corpo : castanha cor dos olhos : preto altura: 18
cm comprimento: 38 cm largura : 24 cm
Métodos : balançar o rabo , latir , deitar , sentar

Em termos de POO para poder tratar os objectos começamos a criar classes , neste caso irei criar a classe
chamada Cachorro.
"Uma classe representa um conjunto de objecto que possuem comportamentos e características comuns".
"Na UML o nome de uma classe é um texto contendo letras e dígitos e algumas marcas de pontuação.
Na realidade, é melhor guardar os nomes curtos com apenas letras e dígitos. UML sugere capitalizar todas as
primeiras letras de cada palavra no nome (ex.: ``Lugar'', ``DataReserva''). É melhor também manter nomes de classes no singular, classes por default ``contem'' mais de um objecto, o plural é implícito.". [Nicolas Anquetil]
Uma classe descreve como certos tipos de objectos a parecerem do ponto de vista da programação , pois quando definimos uma classe precisamos definir duas coisas:

1. Propriedades: Informações específicas relacionadas a uma classe de objecto. São as características dos
objectos que as classes representam. Ex Cor , altura , tamanho , largura , etc...
2. Métodos: São acções que os objectos numa classe podem realizar. Ex: Latir , correr , sentar , comer, etc.
Pode pensar numa classe com um modelo para criar quantos objectos deseja de um tipo particular.

Relacionamento Entre Classes

Os objectos tem relações entre eles: um professor de uma disciplina para alunos numa sala, um cliente faz
uma reserva de alguns lugares para uma data, etc. Essas relações são representadas também no diagrama de
classe. [Nicolas Anquetil]
A UML reconhece três tipos mais importantes de relações: dependência, associação e generalização (ou
herança).
Geralmente as classes não estão sós e se relacionam entre si. O relacionamento e a comunicação entre as
classes definem responsabilidades , temos 3 tipos :
1. Associações : Agregação e composição
2. Generalização (herança)
3. Dependências

As representações usam a seguinte notação :
Aqui temos que Bilu é um objecto da classe
Cachorro.
Em termos de POO acabamos de criar uma instância da classe Cachorro e a chamamos Bilu.
Quando criamos uma nova instância de uma classe
dizemos que estamos instanciando a classe.
 nome
 atributos
 métodos
 Associação : São relacionamentos estruturais entre instâncias e
especificam que objetos de uma classe estão ligados a objetos de outras
classes. Podemos ter associação uniária , binária , etc.
A associação pode existir entre classes ou entre objetos.

UML - Diagrama de Classes Continuação 4...

UML - Diagrama de Classes Continuação 4...
entre a classe Professor e a classe disciplina (um professor ministra uma
disciplina) significa que uma instância de Professor (um professor específico) vai ter uma associação com uma instância de Disciplina.
Esta relação significa que as instâncias das classes são conectadas, seja
fisicamente ou conceptualmente.[Nicolas Anquetil]
 Dependência - São relacionamentos de utilização no qual uma mudança na
especificação de um elemento pode alterar a especificação do elemento
dependente. A dependência entre classes indica que os objectos de uma
classe usam serviços dos objectos de outra classe.

 Generalização (herança : simples ou composta) - Relacionamento entre um elemento mais geral e um
mais específico. Onde o elemento mais específico herda as propriedades e métodos do elemento mais
geral. A relação de generalização também é conhecida como herança no modelo a objectos.
Como a relação de dependência, ela existe só entre as classes. Um objecto particular não é um caso geral de um outro objecto, só conceitos (classes no modelo a objectos) são generalização de outros conceitos.

 Agregação Regular - tipo de associação ( é parte de , todo/parte) onde o objecto parte é um atributo do
todo ; onde os objectos partes somente são criados se o todo ao qual estão agregados seja criado. Pedidos
é composto por itens de pedidos.
 Composição - Relacionamento entre um elemento ( o todo) e outros elementos (as partes) onde as parte
só podem pertencer ao todo e são criadas e destruídas com ele.
O diagrama de de classes lista todos os conceitos do domínio que serão implementados no sistema e as relações entre os conceitos. Ele é muito importante pois define a estrutura do sistema a desenvolver.
O diagrama de classes não surge do nada ele é consequência do prévio levantamento de requisitos , definição de casos de usos e classes. Como exemplo vamos supor que você tivesse que desenvolver um sistema para
automatizar um consultório dentário. As etapas básicas envolvidas seriam:
 Levantamento e análise de requisitos do sistema a ser desenvolvido. Entrevista com o dentista(s) e com as
pessoas que trabalham no consultório
 Definição dos objectos do sistema : Paciente , agenda , dentista , serviço , contrato , consulta ,
pagamento , etc..
 Definição dos actores do sistema : paciente, dentista , secretária
 Definição e de talhamento dos casos de uso: marcar consulta , confirmar consulta , cadastrar paciente ,
cadastrar serviços , etc.
 Definição das classes : paciente , dentista , exame , agenda , serviço
 Definir os atributos e métodos das classes :
Após toda esta análise você chega no diagrama de classes do sistema (representado abaixo a título de exemplo ilustrativo) entre a classe Professor e a classe disciplina (um professor dá uma
disciplina) significa que uma instância de Professor (um professor específico) vai ter uma associação com uma instância de Disciplina.
Esta relação significa que as instâncias das classes são conectadas, seja
fisicamente ou conceitualmente.[Nicolas Anquetil]
 Dependência - São relacionamentos de utilização no qual uma mudança na
especificação de um elemento pode alterar a especificação do elemento dependente.
A dependência entre classes indica que os objectos de uma classe usam serviços dos objectos de outra classe.