Orientação a Objetos Aprenda seus conceitos e suas aplicabilidades de forma efetiva
Thiago Leite e CarvalhoSobre o livro
Quando comecei a ministrar a cadeira de Programação Orientada a Objetos I, vi que no mercado não existiam livros de Orientação a Objetos (OO). Havia na verdade livros de Java, C#, Ruby, Python etc., mas Orientação a Objetos mesmo não. Esses livros focam mais na linguagem em si e mal falam de OO e, quando falam, é muito focado na linguagem. Devido a isso, alguns conceitos terminavam sendo omitidos ou pouco explorados.
Todo semestre era uma dificuldade disponibilizar uma referência bibliográfica para os alunos que tinham acabado de sair da cadeira de lógica de programação. Eles aprenderam com C como programar de forma estruturada, mas na hora de avançar para a Orientação a Objetos, sempre perguntavam: "Professor, você pode indicar um bom livro de Orientação a Objetos?". Eu dizia: "Orientação a Objetos mesmo não, mas temos o livro X que fala da linguagem Y. Ele tem um capítulo que aborda alguns conceitos de OO. Ou seja, não temos livro de Orientação a Objetos".
Foi baseado nisto que decidi escrever este livro. Seu público-alvo são alunos que acabaram de sair da cadeira de lógica de programação, ou até mesmo os que passaram por OO, mas sentem que ainda falta "algo a mais". Também pode ser de interesse de profissionais que estão há mais tempo no mercado de trabalho e só agora estão tendo a oportunidade ou necessidade de se aventurar na Orientação a Objetos.
O objetivo deste livro é focar e explicar da melhor forma possível todos os conceitos deste paradigma de programação. Os conceitos aqui explicados podem ser aplicados em qualquer linguagem que implemente tal paradigma. Vai ser uma decisão de projeto de cada linguagem disponibilizar ou não os conceitos aqui explicados. Entretanto, para algumas demonstrações ficarem mais claras, nada melhor que usar Java e C# como linguagens de exemplo, pois são as mais utilizadas no mercado no momento.
Além de apresentar todos os conceitos bases de OO, vamos também iniciar o leitor em algumas boas práticas no uso deste paradigma de programação e também alguns conceitos mais avançados, mas de suma importância para extrair o máximo da Orientação a Objetos.
Este livro está estruturado da seguinte forma:
* Primeiro vamos ter uma rápida introdução sobre o que é e por que usamos a programação.
* Depois vamos entender a origem da Orientação a Objetos.
* Veremos por que a utilizar.
* O que a OO nos disponibiliza?
* Tendo em mãos as ferramentas, como usá-las?
* Quais as boas práticas?
* Quais novos caminhos devem ser trilhados?
Espero que a leitura seja agradável e enriquecedora. Trabalhei, com a ajuda da Casa do Código, de forma árdua para explicar da forma mais amigável e instigante os conceitos da OO. Este livro é a realização de um projeto que visa fornecer bases sólidas no uso da OO e levar qualquer projeto e profissional, de TI e do ramo de desenvolvimento, ao sucesso. Agradeço a escolha deste livro.
Prefácio
A Orientação a Objetos está na sua sexta década. Entretanto, a sua popularização só aconteceu na década de 90 com o surgimento de linguagens mais sofisticadas em relação a Simula 67 e Smalltalk, tais como Java. Então, a partir deste período, muitas pesquisas, congressos, trabalhos e softwares foram construídos usando este paradigma de desenvolvimento de software.
Em contrapartida a esta popularidade, há sempre um desafio em fazer um desenvolvedor iniciante aprender este paradigma. Normalmente, os aspirantes a programadores de sucesso aprendem de início o paradigma estruturado, que é menos complexo em conceitos e é uma abordagem mais simplista de programação. Embora exista esta dificuldade inicial na visualização e aplicação dos conceitos da Orientação a Objetos, este paradigma tende a ser mais natural, visto que, no trabalho de automação de processos do dia a dia, a manipulação de objetos no mundo real é constante, sejam eles concretos ou abstratos.
Conheço o Thiago desde 2009 e venho acompanhando o seu caminhar na empresa pública em que trabalhamos e nesta linda missão de transmitir conhecimentos e experiência para os seus alunos. Sempre se destacou no desenvolvimento Java orientado a objetos e, por isso, foi convidado e ministrou diversos cursos da plataforma Java nesta empresa, como Java Básico, Java Server Faces, Hibernate, Spring, dentre outros. Como sempre gosta de aprender, por desafios pessoais e profissionais, também já atuou na plataforma .Net.
Com o início da carreira de professor universitário, juntamente com os anos de experiência em desenvolvimento, Thiago percebeu a dificuldade de seus alunos e até mesmo de profissionais com anos de programação em realmente compreender e aplicar os conceitos da Orientação a Objetos. Estes alunos e profissionais até programam em linguagens orientadas a objetos, mas sempre falham em algum ponto na aplicação dos conceitos de objetos, classes, herança, encapsulamentos e outros. Ele também percebeu uma falha na literatura, que cobre bem a programação e a análise orientadas a objetos, mas pecam no que talvez seja o primordial: o ensino dos conceitos básicos do paradigma. Devido a isto, ele resolveu escrever este livro.
Thiago apresenta todos os conceitos de forma clara e objetiva, mostrando sempre exemplos de códigos em duas linguagens, no caso Java e C#. A organização dos conceitos em grupos similares e sua sequência de apresentação facilitam o aprendizado. Um grande diferencial deste livro em relação aos demais, que focam demasiadamente nas linguagens de programação e em como aplicar os conceitos da OO nelas, é uma inversão de prioridade.
Em vez disto, este livro torna os conceitos da Orientação a Objetos o centro das atenções. O resultado desta mudança de foco é que os conceitos e suas aplicabilidades são aprendidos de forma efetiva. Para complementar as explicações, são disponibilizados exemplos de códigos de uma aplicação fictícia, para assim facilitar o entendimento e assimilação. Para finalizar, algumas boas práticas são listadas para os iniciantes não cometerem alguns erros comuns, mas que podem cobrar um preço muito caro no futuro. Também são apresentados alguns próximos passos no caminho do aprendizado da OO.
Tenho certeza de que, ao terminar a leitura deste livro, você será um desenvolvedor diferenciado e mais preparado para usar o paradigma orientado a objetos da melhor forma possível. Vamos lá, embarque com Thiago nesta empolgante e enriquecedora jornada!
Por Régis Patrick Silva Simão
Sobre o autor
Olá pessoal! Meu nome é Thiago Leite e Carvalho, mas sou mais chamado só de Thiago Leite. Adoro desenvolvimento e trabalho com isto desde 2003. Desde os estágios no tempo de faculdade até hoje, já trabalhei em empresas de vários ramos e tipos: software house, empresas públicas, empresas no ramo de saúde, indústrias, entre outros nichos de negócio. Também já prestei algumas consultorias focadas no desenvolvimento.
Esse pula-pula me proporcionou importantes experiências, que me fizeram amadurecer pessoalmente e também profissionalmente. Se não fossem todos os momentos vividos, talvez eu não fosse o que sou hoje. Agradeço a vários colegas de trabalho e faculdade por ajudarem a formar a pessoa e profissional que sou.
Profissionalmente, sou programador Java, sendo assim possuo conhecimentos nos frameworks deste universo: Spring, Hibernate, JSF, Struts etc. Também possuo três certificações em Java. Por necessidade profissional, também já fui um desenvolvedor C# por 4 anos. Também, possuo conhecimentos em Python, mas ainda não tive oportunidade de utilizar esta linguagem profissionalmente.
Nos últimos anos, embarquei no mundo acadêmico. Sou professor de uma faculdade em Fortaleza e ministro duas cadeiras: Programação Orientada a Objetos I e Engenharia de Software. Também já ministrei as cadeiras de Linguagens Formais e Autômatos, Compiladores e Programação Orientada a Objetos II. Adoro lecionar e parto do princípio de que a melhor forma de aprender é ensinar. Além disto, também ministro cursos e palestras. Resumindo, sou um entusiasta do desenvolvimento de software.
Sou graduado e mestre pela Universidade de Fortaleza e, atualmente, sou funcionário público, trabalhando no SERPRO, empresa de tecnologia do Governo Federal. Caso queiram saber um pouco mais sobre mim, acessem meu perfil do Linkedin, em https://www.linkedin.com/in/thiago-leite-e-carvalho-1b337b127. Nele há mais algumas informações.
Sumário
- 1 Introdução
- 2 Um breve histórico da Orientação a Objetos
- 2.1 O conceito de Simulação
- 2.2 Da Noruega para o mundo
- 2.3 A nova roupagem da Orientação a Objetos
- 2.4 O que vem pela frente
- 3 Por que usar a Orientação a Objetos
- 3.1 Reúso
- 3.2 Coesão
- 3.3 Acoplamento
- 3.4 Gap semântico
- 3.5 Resumindo
- 3.6 Para refletir...
- 4 Introdução a Orientação a Objetos
- 4.1 Definição
- 4.2 Os fundamentos
- 4.3 Resumindo
- 4.4 Para refletir...
- 5 Os conceitos estruturais
- 5.1 A classe
- 5.2 O atributo
- 5.3 O método
- 5.4 O objeto
- 5.5 Os tipos de atributo e método
- 5.6 A mensagem
- 5.7 Putting it all together!
- 5.8 Objeto versus Referência
- 5.9 Resumindo
- 5.10 Para refletir...
- 6 Os conceitos relacionais
- 6.1 Herança
- 6.2 Associação
- 6.3 A interface
- 6.4 Resumindo
- 6.5 Para refletir...
- 7 Os conceitos organizacionais
- 7.1 Pacotes
- 7.2 Visibilidades
- 7.3 Resumindo
- 7.4 Para refletir...
- 8 A utilização
- 8.1 Colocando a mão na massa
- 8.2 Estamos quase acabando
- 9 Boas práticas no uso da Orientação a Objetos
- 9.1 BP01: se preocupe com a coesão e o acoplamento
- 9.2 BP02: use strings com parcimônia
- 9.3 BP03: seja objetivo, não tente prever o futuro
- 9.4 BP04: crie seus métodos com carinho
- 9.5 BP05: conheça e use coleções
- 9.6 BP06: sobrescreva equals, hashCode e toString
- 9.7 BP07: às vezes, é melhor associar em vez de herdar
- 9.8 BP08: se for o caso, evite a herança ou, pelo menos, a sobrescrita
- 9.9 BP09: se preocupe com o encapsulamento
- 9.10 BP10: saiba usar interface e classe abstrata no momento certo
- 9.11 BP11: evite especializar o já especializado
- 9.12 BP12: use membros estáticos com parcimônia
- 9.13 BP13: entenda sobre clonagem de objetos e conheça o método clone
- 9.14 BP14: use e abuse das facilidades fornecidas por linguagens orientadas a objetos
- 9.15 BP15: conheça e utilize as convenções de codificação da linguagem escolhida
- 9.16 Finalmente acabou!
- 10 O que vem depois da Orientação a Objetos
- 10.1 Padrões de projeto (Design Patterns)
- 10.2 Refatoração
- 10.3 UML – Unified Modeling Language (Linguagem de Modelagem Unificada)
- 10.4 Orientação a aspectos
- 10.5 Frameworks
- 10.6 Outras coisas a mais...
- 11 Referências bibliográficas
- 12 Apêndice I – A classe Object
- 13 Apêndice II – Classes internas
- 13.1 Classe membro
- 13.2 Classe estática aninhada
- 13.3 Classe local
- 13.4 Classe anônima
- 13.5 E agora?
- 14 Apêndice III - Polimorfismo
- 14.1 A ligação dinâmica
- 14.2 Polimorfismo: um exemplo real
- 14.3 Conclusão
- 15 Apêndice IV - SOLID
- 15.1 SRP: Single Responsibility Principle (Princípio da Responsabilidade Única)
- 15.2 OCP: Open/Closed Principle (Princípio do Aberto/Fechado)
- 15.3 LSP: Liskov Substitution Principle (Princípio de Substituição de Liskov)
- 15.4 ISP: Interface Segregation Principle (Princípio da Separação de Interfaces)
- 15.5 DIP: Dependency Inversion Principle (Princípio da Inversão de Dependência)
- 15.6 Conclusão
- 16 Apêndice V – Respostas
- 16.1 Capítulo 3
- 16.2 Capítulo 4
- 16.3 Capítulo 5
- 16.4 Capítulo 6
- 16.5 Capítulo 7
Dados do produto
- Número de páginas:
- 384
- ISBN:
- 978-85-5519-213-5
- Data publicação:
- 09/2016. Atualizado em 02/2024.