Em Sao PauloSeja o primeiro a comentarLEIA MAISPolicia encontra 1,5 ton de maconha em chacara de Sao Paulo, maior apreensao do ano na capital Cerca de 700 pes de maconha foram encontrados ontem a tarde por policiais militares, na regiao da Serra da Cantareira, zona norte de Sao Paulo. A plantacao foi descoberta apos a prisao de um homem de 63 anos, em Perus, na zona oeste. O homem foi abordado na Avenida Raimundo Pereira de Magalhaes, quando entrava em casa.Os policiais encontraram na residencia um saco e duas latas com maconha, alem de tres bananas de dinamite, 7 metros de cordel detonante, entre outros objetos. O preso confessou que conseguiu o material explosivo em uma pedreira. Ele tambem contou que cultivava maconha e indicou onde ficava a plantacao.Todo material foi apreendido para pericia. O explosivo foi entregue ao Grupo de Acoes Taticas Especiais (Gate) da Policia Militar. O suspeito foi levado ao 33o Distrito Policial (Pirituba), onde foi autuado por cultivo de plantas para preparacao de drogas, posse de entorpecentes e materiais explosivos. Capitulo 4 Classes eInterfacesItem 13 Minimize a acessibilidade declasses e seus membrosItem 14 Em classes publicas, utilizemetodos de acesso, nao campos publicosItem 15 Minimize a mutabilidade Sempreque possivel, crie classes imutaveis (nao possuem metodos mutators (setters),todos os campos sao private, marcar os campos como final, a classe nao pode serestendida, etc). Caso existam operacoes sobre seus atributos, retorne copias daclasse com os novos valores e nao modifique o estado interno. Pode-sedisponibilizar fabricas estaticas (Item 1) e prover cache de instancias que jaforam criadas. Todos os wrapper de primitivos funcionam dessa forma. OBS: Observe que, ser imutavel nao implicaautomaticamente que a classe e um singleton. Uma classe imutavel pode ter varias instancias com valores diferentes namemoria. Diferente do singleton onde so existe uma instancia da classe emmemoria e seu estado interno nao muda na criacao. A abordagem de criar uma fabrica estaticapode ser utilizada em ambas as solucoes. No singleton por motivos obvios, e nasclasses imutaveis para fazer um controle mais refinado das instancias que seraoretornadas. Concluindo,resista a tentacao de escrever um metodo set para cada get criado. Classesdevem ser imutaveis a nao ser que exista uma boa razao para ser diferente disso.Item 16 Utilize composicao ao inves daherancaHeranca viola oencapsulamento. Subclasses dependem de detalhes de implementacao de suassuperclasses e assim sao suscetiveis as mudancas que podem ocorrer nestas. Vejamosum exemplo// Broken - Inappropriate use of inheritance!public class InstrumentedHashSet extends HashSet {// The number of attempted element insertionsprivate int addCount = 0;public InstrumentedHashSet() {}public InstrumentedHashSet(int initCap, float loadFactor) { super(initCap, loadFactor);}@Override public boolean add(E e) { addCount++; returnsuper.add(e);}@Override public boolean addAll(Collection c) { addCount += c.size(); returnsuper.addAll(c); // Na implementacaooriginal o addAll utiliza outro metodo publico // da classe, o add. Quandosuper.addAll e chamado vai executar o // add. Por conta do polimorfismo, o add sobrescritoaqui e que sera // chamado e incrementara o addCount duas vezes.}public int getAddCount() { returnaddCount;}}Perceba como o problema e sutil. Perceba tambemo efeito do polimorfismo! Mesmo chamando super.addAll quando esse metodoexecutar vai chamar o add sobrescrito pela classe InstrumentedHashSet. O fatodo metodo addAll