Orientação a Objetos e SOLID para Ninjas: Projetando classes flexíveis
5/5
()
Sobre este e-book
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.
Leia mais títulos de Mauricio Aniche
Introdução à programação em C: Os primeiros passos de um desenvolvedor Nota: 4 de 5 estrelas4/5Testes automatizados de software: Um guia prático Nota: 5 de 5 estrelas5/5Test-Driven Development: Teste e Design no Mundo Real com PHP Nota: 0 de 5 estrelas0 notasTest-driven development: Teste e design no mundo real com Ruby Nota: 0 de 5 estrelas0 notas
Relacionado a Orientação a Objetos e SOLID para Ninjas
Ebooks relacionados
GraphQL: A revolucionária linguagem de consulta e manipulação de dados para APIs Nota: 0 de 5 estrelas0 notasTest-Driven Development: Teste e Design no Mundo Real Nota: 0 de 5 estrelas0 notasFragmentos de um programador: Artigos e insights da carreira de um profissional Nota: 5 de 5 estrelas5/5Componentes reutilizáveis em Java com reflexão e anotações Nota: 0 de 5 estrelas0 notasJavaScript Assertivo: Testes e qualidade de código em todas as camadas da aplicação Nota: 0 de 5 estrelas0 notasDesign Patterns com Java: Projeto orientado a objetos guiado por padrões Nota: 0 de 5 estrelas0 notasRefatorando com padrões de projeto: Um guia em Ruby Nota: 0 de 5 estrelas0 notasCaixa de Ferramentas DevOps: Um guia para construção, administração e arquitetura de sistemas modernos Nota: 0 de 5 estrelas0 notasTest-Driven Development: Teste e Design no Mundo Real com .NET Nota: 5 de 5 estrelas5/5DevOps na prática: Entrega de software confiável e automatizada Nota: 0 de 5 estrelas0 notasProgramação funcional em .NET: Explore um novo universo Nota: 0 de 5 estrelas0 notasElixir: Do zero à concorrência Nota: 0 de 5 estrelas0 notasSistemas reativos: Não confundir com sistemas radioativos Nota: 0 de 5 estrelas0 notasDesbravando SOLID: Práticas avançadas para códigos de qualidade em Java moderno Nota: 0 de 5 estrelas0 notasDesign Patterns com PHP 7: Desenvolva com as melhores soluções Nota: 5 de 5 estrelas5/5Do PHP ao Laminas: Domine as boas práticas Nota: 3 de 5 estrelas3/5Programação Funcional: Uma introdução em Clojure Nota: 4 de 5 estrelas4/5O retorno do cangaceiro JavaScript: De padrões a uma abordagem funcional Nota: 0 de 5 estrelas0 notasArquitetura de software distribuído: Boas práticas para um mundo de microsserviços Nota: 0 de 5 estrelas0 notasConstruindo APIs REST com Node.js: Caio Ribeiro Pereira Nota: 5 de 5 estrelas5/5Desenvolvimento web com ASP.NET MVC Nota: 0 de 5 estrelas0 notasDesign Patterns com C#: Aprenda padrões de projeto com os games Nota: 0 de 5 estrelas0 notasColetânea Front-end: Uma antologia da comunidade front-end brasileira Nota: 0 de 5 estrelas0 notasDSL: Quebre a barreira entre desenvolvimento e negócios Nota: 0 de 5 estrelas0 notasPrimeiros passos com Node.js Nota: 0 de 5 estrelas0 notasProdutividade em C#: Obtenha mais resultado com menos esforço Nota: 0 de 5 estrelas0 notasPostgreSQL: Banco de dados para aplicações web modernas Nota: 5 de 5 estrelas5/5Dominando JavaScript com jQuery Nota: 1 de 5 estrelas1/5eXtreme Programming: Práticas para o dia a dia no desenvolvimento ágil de software Nota: 0 de 5 estrelas0 notasTDD e BDD na prática: Construa aplicações Ruby usando RSpec e Cucumber Nota: 0 de 5 estrelas0 notas
Programação para você
Aprenda a programar com Python: Descomplicando o desenvolvimento de software Nota: 5 de 5 estrelas5/5MySQL: Comece com o principal banco de dados open source do mercado Nota: 4 de 5 estrelas4/5Lógica de programação com Portugol: Mais de 80 exemplos, 55 exercícios com gabarito e vídeos complementares Nota: 0 de 5 estrelas0 notasLógica de Programação: Crie seus primeiros programas usando Javascript e HTML Nota: 3 de 5 estrelas3/5Python: Escreva seus primeiros programas Nota: 4 de 5 estrelas4/5Introdução a Data Science: Algoritmos de Machine Learning e métodos de análise Nota: 0 de 5 estrelas0 notasCangaceiro JavaScript: Uma aventura no sertão da programação Nota: 5 de 5 estrelas5/5O universo da programação: Um guia de carreira em desenvolvimento de software Nota: 5 de 5 estrelas5/5Trilhas Python: Programação multiparadigma e desenvolvimento Web com Flask Nota: 4 de 5 estrelas4/5Django de A a Z: Crie aplicações web rápidas, seguras e escaláveis com Python Nota: 0 de 5 estrelas0 notasBusiness Intelligence: Implementar do jeito certo e a custo zero Nota: 4 de 5 estrelas4/5Arduino: Guia para colocar suas ideias em prática Nota: 5 de 5 estrelas5/5Python e mercado financeiro: Programação para estudantes, investidores e analistas Nota: 5 de 5 estrelas5/5PostgreSQL: Banco de dados para aplicações web modernas Nota: 5 de 5 estrelas5/5Desenvolvimento web com PHP e MySQL Nota: 3 de 5 estrelas3/5Desbravando Java e Orientação a Objetos: Um guia para o iniciante da linguagem Nota: 5 de 5 estrelas5/5Orientação a Objetos em C#: Conceitos e implementações em .NET Nota: 5 de 5 estrelas5/5Arduino prático: 10 projetos para executar, aprender, modificar e dominar o mundo Nota: 3 de 5 estrelas3/5Desenvolvimento de Jogos em HTML5 Nota: 5 de 5 estrelas5/5Produtividade em C#: Obtenha mais resultado com menos esforço Nota: 0 de 5 estrelas0 notasReact Native: Desenvolvimento de aplicativos mobile com React Nota: 5 de 5 estrelas5/5Machine Learning: Introdução à classificação Nota: 0 de 5 estrelas0 notasGuia prático de TypeScript: Melhore suas aplicações JavaScript Nota: 0 de 5 estrelas0 notasHTML5 e CSS3: Domine a web do futuro Nota: 4 de 5 estrelas4/5O Programador Apaixonado: Construindo uma carreira notável em desenvolvimento de software Nota: 5 de 5 estrelas5/5HTML 5 - Embarque Imediato Nota: 0 de 5 estrelas0 notasLinux Essentials: um guia do sistema operacional Linux para iniciantes Nota: 0 de 5 estrelas0 notasAplicações web real-time com Node.js Nota: 5 de 5 estrelas5/5Kotlin com Android: Crie aplicativos de maneira fácil e divertida Nota: 4 de 5 estrelas4/5Scrum 360: Um guia completo e prático de agilidade Nota: 5 de 5 estrelas5/5
Avaliações de Orientação a Objetos e SOLID para Ninjas
2 avaliações0 avaliação
Pré-visualização do livro
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