Quem sou eu

Minha foto
Rio de Janeiro, RJ, Brazil
Estudante do 8º periodo de Sistemas de Informação.

BEM VINDO!!

BEM VINDO AO BLOGUE DO RAFAEL,
UM BLOG COM BASTANTE CONTEÚDO
E QUE PODE LHE AJUDAR MUITO!!

quarta-feira, 5 de janeiro de 2011

Introdução - POO

PROGRAMAÇÃO
  ORIENTADA
      A
   OBJETOS
1. INTRODUÇÃO                                          1
  1.1 UM BREVE HISTÓRICO DE LINGUAGENS DE PROGRAMAÇÃO  1
  1.2 PROGRAMAÇÃO ORIENTADA A OBJETOS                  2
2. CLASSE                                              5
  2.1 ATRIBUTOS                                        6
  2.2 MÉTODOS                                          6
3. OBJETOS                                             7
4. MENSAGENS                                          11
5. ENCAPSULAMENTO                                     12
6. HERANÇA                                            14
7. POLIMORFISMO                                       20
  7.1 Definição:                                      20
  7.2 Tipos Clássicos de Polimorfismo:                23
8. LATE BINDING                                       23
  8.1 Definição                                       23
  8.2 Tipos                                           24
  8.3 Ligação Precoce e Tardia (O. O.)                25
    8.3.1 Dynamic Typing E Dynamic Binding - O.O.     25
  8.4 Conclusões                                      27
9. BIBLIOGRAFIA                                       28
__________________________________________________________________________________
___
1. INTRODUÇÃO
1.1 UM BREVE HISTÓRICO DE LINGUAGENS DE PROGRAMAÇÃO
       Os caminhos da programação têm mudado dramaticamente desde a invenção do
computador. A primeira razão para as mudanças é acomodar o aumento da complexidade dos
programas. Por exemplo, quando os computadores foram inventados, a programação era feita
por chaveamentos em instruções binárias de máquina, usando-se o painel frontal. Enquanto os
programas continham somente algumas centenas de instruções, esse método funcionava.
Quando cresceram, a linguagem assembly foi inventada para permitir a um programador
manipular complexidades. A primeira linguagem de alto nível difundida foi, obviamente,
FORTRAN. Ainda que o FORTRAN tenha dado um primeiro passo bastante considerável, é
uma linguagem que somente torna os programas mais claros e fáceis de entender do que o
assembly, sem introduzir mudanças consideráveis no estilo de programação.
       Nos anos 60 nasceu a programação estruturada. Esse é o método estimulado por
linguagens como C e Pascal. Usando-se linguagens estruturadas, foi possível, pela primeira vez,
escrever programas moderadamente complexos de maneira razoavelmente fácil. Entretanto,
com programação estruturada, quando um projeto atinge um certo tamanho, torna-se
extremamente difícil e muito custoso efetuar sua manutenção e fazer qualquer modificação. A
cada marco no desenvolvimento da programação, métodos foram criados para permitir ao
programador tratar com complexidades incrivelmente grandes. Cada passo combinava os
melhores elementos dos métodos anteriores com elementos mais avançados. Atualmente,
muitos projetos estão próximos ou no ponto em que o tratamento estruturado não mais
funciona. Para resolver esse problema, a programação orientada a objetos foi criada.
       A programação orientada a objetos aproveitou as melhores idéias da programação
estruturada e combinou-as com novos conceitos poderosos que levam a ver na tarefa de
programação uma nova luz, permitindo que um problema seja mais facilmente decomposto em
subgrupos relacionados. Então, usando-se a linguagem, pode-se traduzir esses subgrupos em
objetos.
       A primeira linguagem a incorporar facilidades para definir classes de objetos genéricos na
forma de uma hierarquia de classes e subclasses foi a linguagem Simula, que foi idealizada em
1966, na Noruega, como uma extensão da linguagem ALGOL 60.
       Uma classe em Simula, é um módulo englobando a definição da estrutura e do
comportamento comuns a todas as suas instâncias (objetos). Como o nome indica, é uma
linguagem adequada à programação de simulações de sistemas que podem ser modelados pela
interação de um grande número de objetos distintos.
                                                                                 
__________________________________________________________________________________
___
       As idéias de Simula serviram de base para as propostas de utilização de Tipos Abstratos
de Dados, e também para Smalltalk. Smalltalk foi desenvolvida no Centro de Pesquisas da
Xerox durante a década de 70, e incorporou, além das idéias de Simula, um outro conceito
importante, devido a Alan Kay, um de seus idealizadores: o princípio de objetos ativos, prontos
a “reagir” a “mensagens” que ativam “comportamentos” específicos do objeto. Ou seja, os
objetos em Smalltalk deixam de ser meros “dados” manipulados por “programas”, e passam a
ser encarados como “processadores idealizados” individuais e independentes, aos quais podem
ser transmitidos comandos em forma de “mensagens”.
       Outras linguagens orientadas para objetos tem sido desenvolvidas. Notadamente C++,
uma extensão de C, Objetive-C, outra extensão de C, menos popular que a anterior, Pascal
orientado a objetos, Eiffel e mais recentemente, no Brasil, TOOL.
       Além da Xerox, que criou a ParcPlace Systems especialmente para comercializar
Smalltalk-80 e seus sucedâneos (objectWorks), a Digitalk lançou em 1986 uma versão de
Smalltalk para ambiente DOS, e mais recentemente a versão para Windows, o que contribuiu
para uma maior difusão da linguagem [Digitalk].
       Smalltalk, uma das mais populares linguagens orientadas a objetos, assim como outras
linguagens orientadas para objetos, tem sido usada em aplicações variadas onde a ênfase está
na simulação de modelos de sistemas, como automação de escritórios, animação gráfica,
informática educativa, instrumentos virtuais, editores de texto e bancos de dados em geral,
entre outras. Tais aplicações diferem substancialmente daquelas em que a ênfase está na
resolução de problemas através de algoritmos, tais como problemas de busca, otimização e
resolução numérica de equações. Para essas aplicações, é mais adequado o uso de linguagens
algorítmicas convencionais, como Pascal, Algol e Fortran.
1.2 PROGRAMAÇÃO ORIENTADA A OBJETOS
       Uma das atividades mais interessantes em Informática é certamente a busca constante de
melhorias nas linguagens e técnicas para o desenvolvimento de software. Desta busca decorrem
as transformações e evoluções das linguagens de programação, surgindo novas linguagens e
novos paradigmas.
       A Programação Orientada a Objetos utiliza os conceitos que aprendemos no jardim de
infância: objetos e atributos, todos e partes, classes e membros. É difícil explicar por que
demoramos tanto a aplicar estes conceitos à análise e especificação de sistemas de informações
- talvez porque estivéssemos ocupados demais “seguindo a boiada” durante o auge da análise
estruturada para imaginar que havia alternativas.
       A Enciclopédia Britânica afirma:
       Na compreensão do mundo real, as pessoas empregam constantemente três métodos de
organização, sempre presentes em todos os seus pensamentos:
                                                                               
__________________________________________________________________________________
___
       (1) Diferenciação, baseado na experiência de cada um, de objetos particulares e seus
atributos - quando distinguem uma árvore, e seu tamanho ou relações espaciais, dos outros
objetos,
       (2) Distinção entre objetos como um todo e entre suas partes componentes - por
exemplo, quando separam uma árvore dos seus galhos, e
       (3) Formação de, e distinção entre, as diferentes classes de objetos - por exemplo,
quando formam uma classe de todas as árvores, uma outra classe de todas as rochas e
distinguem-nas.
       A Programação Orientada a Objetos se apóia nestes três métodos usuais de
organização.
       Programação Orientada a Objetos é a programação implementada pelo envio de
mensagens a objetos. Cada objeto irá responder às mensagens conhecidas por este, e cada
objeto poderá enviar mensagens a outros, para que sejam atendidas, de maneira que ao final
do programa, todas as mensagens enviadas foram respondidas, atingindo-se o objetivo do
programa. Programação Orientada a Objetos, técnicas e artefatos ditos “orientados a objetos”
incluem linguagens, sistemas, interfaces, ambientes de desenvolvimento, bases de dados, etc.
       No entanto, cabe ressaltar que o conceito de Orientação Objeto depende mais da
mentalidade do programador do que da linguagem de programação que está sendo utilizada.
Pode-se conseguir programas razoavelmente orientados a objeto em linguagens tipicamente
estruturadas, assim como pode-se conseguir programas estruturados em linguagens voltadas
para objetos. Tomemos como exemplo a frase:
                       “O navio atraca no porto e descarrega sua carga.”
se analisássemos esta frase estruturadamente, pensaríamos logo em como o navio atraca no
porto e como ele faz para descarregar sua carga, ou seja, pensaríamos na ação que está sendo
feita (que na frase é representada pelos verbos) para transformá-la em procedimento. Em
orientação objeto, o enfoque com que se encara a frase é diferente: primeiro pensaríamos no
objeto navio, no objeto porto e no objeto carga, pensando como eles seriam e procurando
definir seu comportamento. Após isto é que pensaremos em como o navio se relaciona com o
porto e com a carga, e como o porto se relaciona com carga. De modo grosseiro, podemos
dizer que ao analisarmos uma frase pensando estruturadamente, damos ênfase aos verbos, e
pensando orientado a objetos, damos ênfase aos substantivos.
       Pelo que foi visto acima, percebe-se que o programador experiente terá inicialmente
grande dificuldade em migrar para a orientação a objeto, pois terá que esquecer os anos de
prática analisando os problemas estruturadamente, para reaprender a analisá-los de forma
voltada a objeto. Ninguém f ria isto se não tivesse bons motivos. Abaixo são mostradas
                               a
algumas das vantagens que motivam veteranos programadores a readaptar-se para o
paradigma de orientação a objeto:
       ? ?Sensível redução no custo de manutenção do software
       ? ?Aumento na reutilização de código
                                                                               
__________________________________________________________________________________
___
?? Redução no custo de manutenção:
      Na programação orientada a objetos, existem certas características (herança e
encapsulamento) que permitem que, quando for necessária alguma alteração, modifique-se
apenas o objeto que necessita desta alteração, e ela propagar-se-á automaticamente às demais
partes do software que utilizam este objeto. Veremos mais detalhadamente o motivo desta
propagação e os conceitos de herança e encapsulamento em capítulos adiante na apostila.
?? Aumento na reutilização de código:
      Pode-se dizer, de modo simplório, que o conceito de orientação objeto fornece a
possibilidade de um objeto acessar e usar como se fossem seus os métodos e a estrutura de
outro objeto. Deste modo, quando, por exemplo, existirem dois objetos bastante semelhantes,
com mínimas diferenças, pode-se escrever os métodos apenas uma vez e usá-los para os dois
objetos. Apenas os métodos que realmente forem diferentes para os dois objetos é que
precisam ser escritos individualmente. Observamos o exemplo abaixo:
Neste caso, tanto PROFESSOR quanto ALUNO comem, andam e respiram, e foi necessário
escrever o código do método Come ( ), Anda ( ) e Respira ( ) somente uma vez. Apenas os
métodos específicos de PROFESSOR (no caso, Leciona ( ) e Corrige_Prova ( ) ) e de
ALUNO (Assiste_Aula ( ) e Faz_Prova ( ) ) é que precisam ser escritos
      Atualmente existe uma grande discussão sobre o que é exatamente uma linguagem
orientada a objetos. É importante lembrar que um claro conceito de objeto, não caracteriza um
sistema como orientado a objetos. Ao invés de entrarmos na discussão do que seja uma
linguagem orientada a objetos, vamos apresentar os principais mecanismos utilizados nestas
linguagens, sem uma preocupação de explicitar quais deles seriam necessários para dar a uma
linguagem o "Título" de Orientada a Objetos.
      Este texto visa então, introduzir o leitor às principais idéias e conceitos de Programação
Orientada a Objetos. Serão expostos exemplos de implementação em C++ e ilustrações que
                                                                                 
__________________________________________________________________________________
___
permitirão um melhor entendimento do assunto. Nas páginas seguintes abordaremos os
conceitos básicos do Paradigma de Orientação a Objetos: Objetos, Classes, Mensagens,
Métodos, Herança, Generalização, Especialização, Abstração, Polimorfismo, Encapsulamento
e Late-Binding. Conheceremos suas definições conceituais, como podem ser aplicados,
quando devem ser utilizados e principalmente por que devemos usar estes conceitos e quais
são suas vantagens e desvantagens sobre a programação estruturada.

Nenhum comentário:

Postar um comentário

Powered By Blogger