14
0 Unidade: Introdução à POO (Programação Orientada a Objetos)

Unidade: Introdução à POO (Programação Orientada a …...Dentre as linguagens que aceitam OO, podemos destacar SMALTALK, SIMULA-67, EIFFEL, Modula-3, JAVA, C++, Object Pascal,

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

  • 0

    Unidade: Introdução à POO

    (Programação Orientada a

    Objetos)

  • 1

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Unidade: Introdução à POO (Programação Orientada a Objetos)

    Paradigmas de Programação

    Um paradigma de programação fornece (e determina) a visão que o

    programador possui sobre a estruturação e execução de um programa.

    Assim como ao resolver um problema podemos adotar uma entre

    variadas metodologias, ao criar um programa podemos adotar um determinado

    paradigma de programação para desenvolvê-lo.

    No início da década de 70 foi desenvolvido um paradigma de

    programação conhecido como programação estruturada ou procedimental.

    Nesse paradigma o código é composto de vários subprogramas ou subrotinas

    que são ligadas através de chamadas. O foco da programação eram os

    algoritmos criados nas rotinas e a organização dos dados ficava em segundo

    plano.

    Dentre as linguagens que usam paradigma estruturado podemos citar a

    linguagem C, Pascal, Cobol, Basic, Clipper, etc.

    Por outro lado, no paradigma de POO o foco da programação é em cima

    dos dados e sua estruturação e em seguida examina os algoritmos que

    manipularão esses dados.

    Embora a POO exista desde a década de 60, os últimos 10 anos têm

    visto um crescimento exponencial no uso e aceitação de tecnologias de objeto,

    sendo o paradigma mais utilizado no momento para o desenvolvimento de

    projetos de software. Dentre as linguagens que aceitam OO, podemos destacar

    SMALTALK, SIMULA-67, EIFFEL, Modula-3, JAVA, C++, Object Pascal, C#,

    etc.

    Figura 1 - Modelos de Programação

  • 2

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    As linguagens OO diminuem a distância entre o mundo real e o

    computacional, pois propõem a abstração e modelagem de objetos do mundo

    real no mundo virtual através de modelos matemáticos ou classes, diferente da

    programação estruturada onde os algoritmos eram muito abstratos e somente

    compreendidos por programadores.

    Na POO a modelagem de dados é a parte mais importante do projeto

    através de classes que representam entidades do mundo real. As classes (ou

    modelos) geram objetos que se comunicam com outros objetos através de

    mensagens. Temos vários mecanismos na POO para facilitar o

    reaproveitamento de código como herança, polimorfismo e encapsulamento,

    nos quais entraremos com mais detalhes nas unidades seguintes.

    De certa forma, um programa OO se torna uma simulação viva do

    problema que está se tentando resolver. Esse paradigma exige que o analista

    tenha uma visão global do problema em nível conceitual, permitindo o uso de

    substantivos, adjetivos e verbos do domínio do seu problema.

    Porque usar POO

    Os sistemas projetados atualmente são maiores, mais complexos e

    sujeitos a constantes alterações e adaptações aos diversos ambientes

    computacionais. Através do encapsulamento de informações, a reutilização de

    esforços empregados em projetos anteriores e a modificação do sistema se

    tornaram mais fáceis.

    A metodologia OO é baseada em “objetos do mundo real”, e por este

    motivo, é mais intuitiva ao ser humano, tais como: objetos e atributos, classes e

    membros, estruturas e componentes, ação e reação. Os métodos de

    desenvolvimento de software anteriores ao surgimento desse paradigma

    organizam a especificação de um sistema de acordo com suas funções ou com

    os dados manipulados. Geralmente, esses métodos apresentam dificuldades

    na transição da representação do sistema em uma fase para outra do processo

    de desenvolvimento (da Análise para o Projeto e, do Projeto para a

    Implementação).

  • 3

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Em um sistema orientado a objetos, os dados e todas as operações, que

    manipulam esses dados, são agrupados em uma única estrutura: “as classes”.

    Desde o início do desenvolvimento desses sistemas e, em todas as suas fases,

    o analista trabalha com o mesmo elemento de abstração, os objetos.

    Nos dias atuais, temos uma dependência generalizada em sistemas de

    computação. O software é parte cada vez maior dos custos e do sucesso

    desses sistemas, e a produção do software é uma atividade complexa, pois são

    cada vez maiores e mais elaborados, exigindo métodos cada vez mais

    disciplinados de desenvolvimento.

    A indústria de software não consegue atender toda a demanda,

    principalmente porque os programas precisam ter alta disponibilidade, alcance

    global, estrutura escalar, alto desempenho, segurança e usabilidade.

    Os negócios evoluem mais rápido que as soluções de TI. Como manter

    um software atualizado com o menor custo de desenvolvimento? O mercado

    muda constantemente, as tecnologias mudam inevitavelmente e a vontade e

    objetivos dos usuários mudam imprevisivelmente!

    Portanto, precisamos de um paradigma de programação capaz de

    diminuir o tempo e o custo de mudanças e aumentar a capacidade de

    adaptação e, por isso, os objetos são ótimos recursos para melhorar isso.

    Classes

    Uma classe é uma entidade que descreve um conjunto de objetos com

    propriedades e comportamentos semelhantes e com relacionamentos comuns

    com outros objetos. Consiste no modelo ou esquema a partir do qual os objetos

    são criados.

    As classes são as partes mais importantes de qualquer sistema

    orientado a objetos, pois elas representam a modelagem do objeto do mundo

    real no sistema computacional. Usamos as classes para capturar o vocabulário

    do sistema que está em desenvolvimento.

  • 4

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Figura 2 - Exemplo de classe (Pessoa)

    Na Figura 2 mostramos um exemplo de representação de classes, que

    se chama Diagrama de Classes. Esse diagrama provém do modelo UML

    (Unified Modeling Language), que consiste em uma linguagem de modelagem

    de sistemas OO. Além do Diagrama de Classes, a UML ainda possui o

    Diagrama de Caso de Uso, Diagrama de Transição de Estados, Diagrama de

    Atividades, Diagrama de Sequência, dentre outros. Para nossos estudos nessa

    disciplina, usaremos apenas o Diagrama de Classes.

    Toda classe é dividida em três partes sendo a primeira o nome da

    classe, que deve ser no singular, pois representa um modelo. Em seguida,

    temos os atributos que representam as características dos objetos e por fim

    temos os métodos que representam as ações que os objetos podem executar.

    Os objetos se comunicam através de mensagens que são executadas através

    dos métodos.

    No exemplo da Figura 2 temos uma classe chamada “Pessoa”. O

    objetivo dessa classe é abstrair as principais características em comum de

    pessoas do mundo real, nesse caso, usamos nome e idade como atributos.

    Essa classe é um “molde” para a criação de qualquer pessoa, pois todas terão

    a mesma característica. Temos 4 métodos no padrão set e get que veremos

    com detalhes quando falarmos de encapsulamento. Veja outro exemplo na

    Figura 3.

  • 5

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Figura 3 - Exemplo de classe (Livro)

    Na Figura 3 acima, vemos as três etapas de construção de uma classe.

    Na primeira etapa temos o objeto do mundo real (livros). Esses objetos são

    abstraídos e as principais características comuns são modeladas em uma

    classe conforme etapa 2, onde temos como atributos isbn, titulo e autor. Além

    dos atributos (dados) também criamos os métodos, que correspondem às

    ações que podem ser executadas em cima dos dados. Na última etapa, de

    implementação, escolhemos uma linguagem para implementar a classe, no

    nosso exemplo escolhemos Java. No momento não é importante entender a

    programação Java e sim as etapas de construção de uma classe.

    Para dar outro exemplo, vamos ver como faríamos um modelo em um

    esquema POO de uma fração, ou seja, essa estrutura matemática que tem um

    numerador e um denominador que divide ao numerador, por exemplo, 3/2.

    Podemos criar uma classe de nome “Fracao” que terá dois atributos, o

    numerador e o denominador. Logo, poderia ter vários métodos como

    simplificar, somar com outra fração ou número, subtrair com outra fração, etc.

    Claro que um Diagrama de Classes UML geralmente não tem apenas

    uma classe. Ele contempla várias classes do sistema e como elas trocam

    mensagens, porém no momento vamos trabalhar com uma classe de cada vez.

  • 6

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Objetos

    Objetos são quaisquer coisas na natureza que possuam propriedades

    (características) e comportamentos (operações). Veja alguns exemplos na

    Figura 4 abaixo.

    Figura 4 - Exemplo de objetos

    O termo orientação a objetos significa organizar o mundo real como uma

    coleção de objetos que incorporam estrutura de dados e um conjunto de

    operações que manipulam estes dados.

    Figura 5 - Exemplos de classes

    Note na Figura 5 anterior que a classe possui sempre duas partes além

    do nome, os atributos que representam as propriedades comuns dos objetos e

    os métodos que representam os comportamentos comuns dos objetos.

    Note que classe não tem vida, são apenas modelos conceituais.

    Enquanto não criamos objetos baseados nessa classe, não existem dados,

    apenas abstrações.

  • 7

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Classe é uma especificação para um conjunto de objetos com

    características semelhantes;

    Uma classe representa um tipo de dados complexo;

    Objetos são instâncias de uma classe (exemplos).

    Figura 6 – Exemplos de Objetos

    Para criar objetos devemos especificar a classe a partir da qual o objeto

    será criado. Note na Figura 6 anterior que temos uma classe chamada “Casa” e

    três instâncias dessa classe, ou seja, três objetos da classe Casa chamados

    c1, c2 e c3 cada um contendo dados para seus atributos, gerando um “estado

    do objeto”. O mesmo ocorre com a classe Livro que possui três objetos

    instanciados, cada com um o seu “estado do objeto”.

    Vimos na Figura 6 que para instanciar objetos usamos o operador “new”.

    Veremos esse operador com mais detalhes quando partirmos para a

    programação em si.

    Todos os objetos, que são instâncias da mesma classe, compartilham

    uma semelhança de família suportando o mesmo comportamento. O

    comportamento de um objeto é definido pelos métodos que você pode chamar.

    No exemplo da casa da Figura 6, o método abre Porta () pode ser usado por

  • 8

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    qualquer objeto instanciado, porém somente o terceiro usou (ou invocou).

    Para trabalhar com POO você precisa ser capaz de identificar três

    características-chave dos objetos:

    1. O comportamento do objeto – o que você pode fazer com esse objeto

    ou quais métodos pode aplicar nele. Quando um objeto é

    instanciado, todos os métodos da classe a que pertence podem ser

    invocados pelo objeto.

    2. O estado do objeto – conjunto de valores internos de um objeto.

    Quando objetos são instanciados, uma área de memória é aberta

    para cada objeto, sendo que os valores são armazenados

    distintamente.

    3. A identidade do objeto – como o objeto é diferenciado e identificado

    entre outros objetos que possuem o mesmo comportamento e

    estado. Os objetos podem ter exatamente o mesmo estado, ou seja,

    seus atributos podem ter o mesmo valor, porém eles são

    diferenciados pelo nome do objeto que foram criados.

    Implementação de Classes e Objetos

    Para exemplificar a criação de classes e objetos, vamos usar a

    linguagem Java, mesmo porque a utilização em outras linguagens segue o

    mesmo conceito e as diferenças são pequenas.

    Figura 7 - Implementando uma classe

    O modelo de uma classe pode ser implementado em um arquivo com o

    mesmo nome da classe pública que contém. Cada arquivo JAVA só pode

    conter uma classe pública.

  • 9

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Existem alguns padrões para programação em Java, sendo que nomes

    de classes e atributos são criados com identificadores que usam as seguintes

    regras:

    - somente letras, números e underline;

    - não começam com número;

    - não podem ter espaço em branco;

    - não podem ser palavras reservadas da linguagem;

    - não podem ter caracteres especiais como!, @, #, *, etc.

    Para classes, as iniciais devem ser maiúsculas e para atributos todas as

    letras devem ser minúsculas.

    Em Java temos 8 tipos primitivos que podem ser usados como tipos de

    atributos, sendo:

    byte - 8 bits (inteiro)

    short - 16 bits (inteiro)

    int - 32 bits (inteiro)

    long - 64 bits (inteiro)

    float - ponto flutuante de 32 bits (real)

    double - ponto flutuante de 64 bits (real)

    char - Unicode de 16 bits (1 caractere)

    boolean – true / false (lógico)

    Além dos tipos primitivos, podemos usar tipos abstratos como tipos de

    atributos. Em Java existem muitas classes prontas que podem ser utilizadas

    como tipos para atributos, como por exemplo, a classe String para armazenar

    texto. Na Figura 8 a seguir, a classe Aluno representada foi implementada em

    Java.

    Figura 8 – Classe Aluno

  • 10

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Na Figura 8 mostramos um Diagrama de Classe com a classe Aluno que

    foi implementada em Java. No exemplo, o arquivo gerado é Aluno.java.

    Ao criar uma classe, ela passa a ser um tipo abstrato de dados que pode

    instanciar objetos. Para instanciar objetos usamos o operador new.

    Figura 9 – Instanciando objetos da classe Aluno

    Note que na linha 1 estamos criando outro arquivo (TesteAluno.java) que

    contem uma classe pública TesteAluno. No caso mais simples, para o

    programa identificar que existe uma classe Aluno pronta (Aluno.java), os

    arquivos devem estar na mesma pasta do sistema.

    Na linha 2 criamos um método principal (main) que será executado

    quando o programa for rodado. Nas linhas 5 e 6 instanciamos 2 objetos da

    classe Aluno (maria e joao). Os 2 objetos criados possuem os atributos de

    nome, idade e altura.

    Nas linhas de 9 a 12 estamos criando o estado dos objetos. Podemos

    acessar os atributos de um objeto através do seu nome e seu atributo

    separados por um ponto.

    Para confirmar que os dados foram atribuídos, nas linhas de 15 a 19

    estamos imprimindo na tela os valores.

    Para finalizar esta Unidade, vamos então ver outro exemplo de criação

    de classes e instância de objetos.

  • 11

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Figura 10 – Classe Carro

    Na Figura 10 vemos uma classe de nome Carro, que deve estar em um

    arquivo de nome Carro.java. Note que ainda não estamos usando os métodos

    (ações), apenas os atributos.

    Figura 11 – Instanciando objetos da classe Carro

    Na Figura 11 vemos a criação de instâncias (objetos) da classe Carro.

  • 12

    Unid

    ade

    : In

    troduçã

    o à

    PO

    O (

    Pro

    gra

    mação O

    rienta

    da

    a O

    bje

    tos)

    Referências SINTES, Tony. (2002) Aprenda Programação Orientada a Objetos em 21

    dias. 1 ed. São Paulo: Pearson Education do Brasil, 2002, v. 1, p. 3-16

    DEITEL, P.; DEITEL, H. (2010) Java Como Programar, 8 ed. São Paulo:

    Pearson Education do Brasil, 2010, p. 57-58.

    HORSTMANN, C.S.; CORNELL, G. (2010) Core Java. 8 ed. São Paulo:

    Pearson Education do Brasil, 2010, v. 1, p. 51-53.

  • 13

    Responsável pelo Conteúdo:

    Prof. Ms. Amilton Souza Martha

    Lattes: http://lattes.cnpq.br/5455047756459479

    Revisão Textual:

    Profa. Ms. Rosemary Toffoli

    www.cruzeirodosul.edu.br

    Campus Liberdade

    Rua Galvão Bueno, 868

    01506-000

    São Paulo SP Brasil

    Tel: (55 11) 3385-3000