Orientação a Objetos e SOLID para Ninjas: Projetando classes flexíveis
5/5
()
About this ebook
Neste livro, Maurício Aniche discute como a implementação e o foco no projeto de classes é importante para criar um software de qualidade. Sempre mantendo a característica de escrever um livro com uma didática voltada para o mundo real, você vai entender como moldar e dominar as peças da Orientação a Objetos usando os princípios de SOLID e escrevendo um código mais elegante e fácil de manter. Saia do básico e vire um ninja da Orientação a Objetos aprendendo de forma prática e eficaz as boas práticas do assunto.
Os exemplos ao longo do livro estão escritos em Java, porém são facilmente compreendidas por qualquer programador. As discussões fazem sentido para todas as linguagens OO.
Read more from Mauricio Aniche
Introdução à programação em C: Os primeiros passos de um desenvolvedor Rating: 4 out of 5 stars4/5Testes automatizados de software: Um guia prático Rating: 5 out of 5 stars5/5Test-Driven Development: Teste e Design no Mundo Real com PHP Rating: 0 out of 5 stars0 ratingsTest-driven development: Teste e design no mundo real com Ruby Rating: 0 out of 5 stars0 ratings
Related to Orientação a Objetos e SOLID para Ninjas
Related ebooks
GraphQL: A revolucionária linguagem de consulta e manipulação de dados para APIs Rating: 0 out of 5 stars0 ratingsTest-Driven Development: Teste e Design no Mundo Real Rating: 0 out of 5 stars0 ratingsFragmentos de um programador: Artigos e insights da carreira de um profissional Rating: 5 out of 5 stars5/5Desbravando SOLID: Práticas avançadas para códigos de qualidade em Java moderno Rating: 0 out of 5 stars0 ratingsDesign Patterns com Java: Projeto orientado a objetos guiado por padrões Rating: 0 out of 5 stars0 ratingsComponentes reutilizáveis em Java com reflexão e anotações Rating: 0 out of 5 stars0 ratingsECMAScript 6: Entre de cabeça no futuro do JavaScript Rating: 5 out of 5 stars5/5O retorno do cangaceiro JavaScript: De padrões a uma abordagem funcional Rating: 0 out of 5 stars0 ratingsProgramação funcional em .NET: Explore um novo universo Rating: 0 out of 5 stars0 ratingsTest-Driven Development: Teste e Design no Mundo Real com .NET Rating: 5 out of 5 stars5/5JavaScript Assertivo: Testes e qualidade de código em todas as camadas da aplicação Rating: 0 out of 5 stars0 ratingsRefatorando com padrões de projeto: Um guia em Ruby Rating: 0 out of 5 stars0 ratingsDesign Patterns com C#: Aprenda padrões de projeto com os games Rating: 0 out of 5 stars0 ratingsElixir: Do zero à concorrência Rating: 0 out of 5 stars0 ratingsArquitetura de software distribuído: Boas práticas para um mundo de microsserviços Rating: 0 out of 5 stars0 ratingsDominando JavaScript com jQuery Rating: 1 out of 5 stars1/5O Programador Apaixonado: Construindo uma carreira notável em desenvolvimento de software Rating: 5 out of 5 stars5/5DevOps na prática: Entrega de software confiável e automatizada Rating: 0 out of 5 stars0 ratingsReact Native: Desenvolvimento de aplicativos mobile com React Rating: 5 out of 5 stars5/5TDD e BDD na prática: Construa aplicações Ruby usando RSpec e Cucumber Rating: 0 out of 5 stars0 ratingsSistemas reativos: Não confundir com sistemas radioativos Rating: 0 out of 5 stars0 ratingsRoadmap back-end: Conhecendo o protocolo HTTP e arquiteturas REST Rating: 5 out of 5 stars5/5Manual de sobrevivência do novo programador: Dicas pragmáticas para sua evolução profissional Rating: 4 out of 5 stars4/5DSL: Quebre a barreira entre desenvolvimento e negócios Rating: 0 out of 5 stars0 ratingsPrimeiros passos com Node.js Rating: 0 out of 5 stars0 ratingsDesenvolvimento web com ASP.NET MVC Rating: 0 out of 5 stars0 ratingsProgramação Funcional: Uma introdução em Clojure Rating: 4 out of 5 stars4/5Cangaceiro JavaScript: Uma aventura no sertão da programação Rating: 5 out of 5 stars5/5Caixa de Ferramentas DevOps: Um guia para construção, administração e arquitetura de sistemas modernos Rating: 0 out of 5 stars0 ratingseXtreme Programming: Práticas para o dia a dia no desenvolvimento ágil de software Rating: 0 out of 5 stars0 ratings
Programming For You
Desbravando Java e Orientação a Objetos: Um guia para o iniciante da linguagem Rating: 5 out of 5 stars5/5Estruturas de Dados: Domine as práticas essenciais em C, Java, C#, Python e JavaScript Rating: 0 out of 5 stars0 ratingsSEO Prático: Seu site na primeira página das buscas Rating: 0 out of 5 stars0 ratingsConsultoria Especializada e Estratégias De Trade De Forex Rating: 0 out of 5 stars0 ratingsLógica de programação com Portugol: Mais de 80 exemplos, 55 exercícios com gabarito e vídeos complementares Rating: 0 out of 5 stars0 ratingsScratch: Um jeito divertido de aprender programação Rating: 0 out of 5 stars0 ratingsO universo da programação: Um guia de carreira em desenvolvimento de software Rating: 5 out of 5 stars5/5Lógica de Programação: Crie seus primeiros programas usando Javascript e HTML Rating: 3 out of 5 stars3/5Introdução a Data Science: Algoritmos de Machine Learning e métodos de análise Rating: 0 out of 5 stars0 ratingsDesenvolva jogos com HTML5 Canvas e JavaScript Rating: 4 out of 5 stars4/5Python: Escreva seus primeiros programas Rating: 4 out of 5 stars4/5Desenvolvimento de Jogos em HTML5 Rating: 5 out of 5 stars5/5Algoritmos em Java: Busca, ordenação e análise Rating: 5 out of 5 stars5/5Aprenda a programar com Python: Descomplicando o desenvolvimento de software Rating: 5 out of 5 stars5/5Orientação a Objetos em C#: Conceitos e implementações em .NET Rating: 5 out of 5 stars5/5Arduino: Guia para colocar suas ideias em prática Rating: 5 out of 5 stars5/5ECMAScript 6: Entre de cabeça no futuro do JavaScript Rating: 5 out of 5 stars5/5Scrum 360: Um guia completo e prático de agilidade Rating: 5 out of 5 stars5/5Aplicações web real-time com Node.js Rating: 5 out of 5 stars5/5Introdução à computação: Da lógica aos jogos com Ruby Rating: 0 out of 5 stars0 ratingsAprofundando em Flutter: Desenvolva aplicações Dart com Widgets Rating: 5 out of 5 stars5/5Orientação a Objetos: Aprenda seus conceitos e suas aplicabilidades de forma efetiva Rating: 5 out of 5 stars5/5MySQL: Comece com o principal banco de dados open source do mercado Rating: 4 out of 5 stars4/5O retorno do cangaceiro JavaScript: De padrões a uma abordagem funcional Rating: 0 out of 5 stars0 ratingsArduino prático: 10 projetos para executar, aprender, modificar e dominar o mundo Rating: 3 out of 5 stars3/5Python e mercado financeiro: Programação para estudantes, investidores e analistas Rating: 5 out of 5 stars5/5Guia prático de TypeScript: Melhore suas aplicações JavaScript Rating: 0 out of 5 stars0 ratingsHTML5 e CSS3: Domine a web do futuro Rating: 4 out of 5 stars4/5Kotlin com Android: Crie aplicativos de maneira fácil e divertida Rating: 4 out of 5 stars4/5Trilhas Python: Programação multiparadigma e desenvolvimento Web com Flask Rating: 4 out of 5 stars4/5
Reviews for Orientação a Objetos e SOLID para Ninjas
2 ratings0 reviews
Book preview
Orientação a Objetos e SOLID para Ninjas - Mauricio Aniche
Agradecimentos
Agradecer é sempre a parte mais difícil. Em primeiro lugar, agradeço a meus pais por sempre apoiarem toda e qualquer iniciativa que tenho. Ver o quanto eles ficam orgulhosos a cada pequena conquista em minha carreira me faz querer sempre mais e mais.
Agradeço também ao meu amigo e colega de trabalho, Guilherme Silveira, pelas incontáveis discussões técnicas que temos por e-mail, pessoalmente, telefone, gtalk, e todos os outros meios de comunicação possíveis. Suas opiniões fortes e bem decididas sobre diversos pontos de engenharia de software sempre me fazem pensar a respeito das minhas opiniões. É sempre bom ter pessoas prontas para debater qualquer assunto técnico.
Não posso deixar de agradecer também ao meu grupo de pesquisa na USP, que de maneira indireta sempre me faz aprender muito sobre engenharia de software. Fica então meu abraço ao Marco Gerosa, Gustavo Oliva, Igor Steinmacher e Igor Wiese.
E, em um livro sobre Orientação a Objetos, não posso deixar de agradecer ao meu professor da graduação, Ismar Frango Silveira, que realmente me ensinou o que é OO. Sua paixão pelo ensino também me motivou muito a me tornar professor e passar conhecimento adiante.
Agradeço também ao Rodrigo Turini, excelente desenvolvedor da Caelum, que leu o livro, e me deu excelentes feedbacks e sugestões de melhoria.
Por fim, a todos meus amigos, que me aguentam falando o tempo todo sobre o quanto é difícil e trabalhoso escrever um livro.
Forte abraço a todos!
Prefácio por Ismar Frango Silveira
Caro(a) leitor(a),
Seja você um(a) expert em programação, conhecedor(a) pleno de uma dúzia de linguagens; ou um(a) programador(a) dedicado(a) a uma – quiçá duas – linguagens diferentes; ou um(a) novato(a) que se perde no infindável mar de ponto e vírgulas e parênteses; ou ainda simplesmente uma pessoa curiosa, querendo compreender esse universo que faz com que pessoas aparentemente normais passem noites a fio sem dormir à base de café escrevendo sentenças ilegíveis em alguma língua
estranha: afirmo, sem te conhecer, que este livro é para você.
Caso os cabelos brancos já sejam maioria entre os fios que restaram em sua cabeça, possivelmente você deve ter acompanhado a implementação dos conceitos rudimentares de objetos em Simula-67. Deve também ter visto o paulatino aparecimento de linguagens imperativas com a inclusão de alguns elementos diferentes
(como tipos abstratos de dados e encapsulamento). Possivelmente você tomou contato com a implementação plena dos conceitos da uma teoria (que seria conhecida como Orientação a Objetos) na linguagem Smalltalk – parte do visionário projeto Dynabook da Xerox – pelos idos de 1980.
Tempos árduos esses: o advento da computação pessoal estava dando seus primeiros passos no mundo e trazia consigo um enorme potencial de demanda para o desenvolvimento de software. Pela primeira vez, era possível que o valor agregado de um software sobrepujasse o hardware, ainda caro naquela época. Em especial, o Brasil, por ser refém de uma reserva de mercado que nos alijava do desenvolvimento tecnológico mundial, tentava dar sôfregos passos no que diz respeito à criação de um mercado interno e à formação de profissionais para a área.
Era mais fácil encontrar uma nota de cem cruzeiros (seja lá o quanto isso valesse, dada a instabilidade econômica da época) do que um programador com formação adequada. Que esse programador houvesse ouvido falar sobre Orientação a Objetos, ainda mais raro. Se você se identificou com esta época, possivelmente frequentou os bancos universitários em algum curso de Matemática ou Engenharia, já que Bacharelados em Ciência da Computação eram raridade por essas bandas (o primeiro foi na Unicamp, em 1969). Ou foi curioso(a) – e corajoso(a) - o suficiente para aprender sozinho.
Talvez você não tenha tanto cabelos brancos assim e palavras como C++, Delphi, Java e C# lhe soem mais familiares. Se este é o seu caso, possivelmente você deve ter visto, entre meados da década de 1980 até o início deste século, o surgimento de uma dessas linguagens em um cenário bastante diferente. Ao fugir do purismo
de Smalltalk e bebendo (algumas, se embriagando) da fonte de linguagens imperativas, como C e Pascal, estas linguagens caíram no gosto popular e impulsionaram fortemente o modelo de Programação Orientada a Objetos.
Métodos de Análise e Projeto orientados a objetos surgiram e desapareceram neste período, até a unificação, ao menos no que diz respeito aos diagramas, proposta pela UML a partir de 1997. Com a padronização da pilha de protocolos de Internet e o surgimento da WWW, conceitos de Orientação a Objetos foram inspiradores para linguagens que se tornaram populares neste novo cenário, como Javascript e PHP. Formou-se assim o caldo que deu origem ao cenário atual, em que temos as linguagens que seguem, total ou parcialmente, o Paradigma da Orientação a Objetos como dominantes em um mercado cada vez mais complexo e competitivo.
Esse período trouxe uma evolução nunca antes vista nos conceitos de computação pessoal: os microcomputadores foram abrindo espaço para notebooks, cada vez mais compactos e potentes (troque-se o note por net, ultra ou o próximo termo da moda); estes, por sua vez, vêm sendo sobrepujados por dispositivos móveis (de smartphones e tablets a smartclocks e todo tipo de gadget que vem aparecendo), segmento igualmente beneficiado pelo barateamento e compactação do hardware. E tudo isso com crescentes possibilidades de conectividade e ubiquidade (independente da sua Wifi ou conexão 3G não funcionar muito bem na hora que você mais precisa). As linguagens de programação desempenharam um papel importante, ao evoluírem junto com o hardware para atender as diversas novas demandas de desenvolvimento.
Porém, vai que você seja um(a) novato(a) - ou simplesmente curioso(a) - nesse fantástico universo do desenvolvimento de software. Se assim for, prepare-se! O cenário que se desenhou no século XXI é desafiador e emocionante: ao mesmo tempo em que temos incríveis IDEs que parecem fazer todo o trabalho sujo
da programação (corrigir sintaxe, refatorar código, aplicar padrões automaticamente, etc.), os requisitos de software estão cada vez mais sofisticados e complexos – a turma dos cabelos brancos não tinha que se preocupar com mobilidade, interfaces responsivas e segurança, por exemplo. As populares linguagens orientadas a objeto vêm evoluindo de forma a se tornarem multiparadigmas – ou seja, mesclando construtos oriundos da programação funcional, concorrente, entre outras.
Nesse admirável mundo novo, compreender, de forma precisa, a miríade de conceitos e técnicas que orbitam a área de Orientação a Objetos não é uma tarefa fácil. Compreender esses conceitos e explicá-los de maneira cristalina, em uma linguagem fluida e agradável, ilustrando conceitos complexos com exemplos didáticos, é o desafio ao qual Mauricio Aniche se lançou na confecção deste livro. Não tenho a menor dúvida de que ele atingiu plenamente seu objetivo – e convido você, leitor(a), a comprovar isso.
Boa leitura!
Ismar Frango Silveira
Prefácio por Guilherme Silveira
São 20:54. Na pausa do filme, ligo para o Aniche. Não sei o que fazer com o código que vi hoje, são cinco minutos, que viram dez, vinte. Uma conversa no dia seguinte, um e-mail na lista de discussão da Caelum ou do Alura.
Não foi uma, duas, nem vinte vezes. A vantagem de se conhecer um especialista é em uma conversa simples para resolver um problema de design surgirem outras vinte questões que não levantamos antes.
Criar qualquer coisa é fácil, um novo sistema, uma grande pedra. Difícil é mantê-la de pé, moldá-la. Sua fundação, seu design, são esculpidos e revelados pelos que se dedicam a essa tarefa, revelando dentro daquele bloco o significado de sua existência.
Entender como diversas técnicas de engenharia de software, de qualidade de código, afetam nosso desenvolvimento no dia a dia é um desafio que nós todos, durante nossa busca pelo crescimento profissional, devemos almejar. E este livro reflete diversos dos tópicos que formam a base das conversas que tenho com o Aniche, a quem peço o conselho, a confirmação ou o questionamento do que fiz ou pretendo fazer.
Entender como reduzir um problema do mundo real a um problema de design é a ideia que o livro propõe. O resultado é visível no primeiro uso dessas técnicas, seja aqui no livro ou no mundo real, sentimos como é mais fácil adicionar funcionalidades ou modificar comportamentos, uma vez que nos preocupamos mais com como fizemos, não só com o quê.
Claro, como toda prática, devemos saber dosar, quanto e até quando vale a pena utilizá-las. Sabido
, o Aniche nos mostra o caminho por meio de exemplos do mundo real onde percebemos e nos identificamos aos poucos com os problemas que surgem no código, para então criarmos juntos uma solução, uma proposta de mudança no design.
Nossa lição de casa é, da mesma maneira que no livro, criarmos projetos de maior qualidade, para que possamos manter uma relação saudável com nosso trabalho, nossa obra, por mais tempo e com mais produtividade.
Amanhã, especificamente, não ligarei para o Aniche para aprender mais sobre meu design, poderei revisar diversas de suas recomendações por este livro.
Guilherme Silveira
Quem sou eu?
Meu nome é Mauricio Aniche e trabalho com desenvolvimento de software há 10 anos. Em boa parte desse tempo, atuei como consultor para diferentes empresas do mercado brasileiro e internacional. Com certeza, as linguagens mais usadas por mim ao longo da minha carreira foram Java, C# e C.
Como sempre pulei de projeto em projeto (e, por consequência, de tecnologia em tecnologia), nunca fui a fundo em nenhuma delas. Pelo contrário, sempre foquei em entender princípios que pudessem ser levados de uma para outra, para que no fim, o código saísse com qualidade, independente da tecnologia.
Justamente por esse motivo, fui obrigado a pesquisar por melhores práticas de programação, e como escrever código bom em todo lugar e projeto de que participava. Não teve jeito: acabei caindo em Orientação a Objetos. E de lá para cá, venho estudando com muito afinco boas práticas de programação.
Já participei de diversos eventos da indústria e academia brasileira, como é o caso da Agile Brazil, WBMA, SBES, e internacionais, como o ICSME, ICST, PLoP