Todos os post de mbelo

Tamanho importa?

Muito diferente do que a pergunta do título possa sugerir, o tema que abordo trata de Engenharia de Software. Muito se lê em livros que tratam de refatoração (como o do Fowler et al) e de boas práticas de código (como o do Robert Martin) sobre como identificar códigos OO mal redigidos. Fala-se sobre vários princípios, como o Aberto/Fechado, o de substituição de Liskov, o de Responsabilidade Única, etc; o livro do Fowler dá até dicas sobre como identificar tais problemas no código OO: os maus cheiros de código.

Não obstante, tais percepções não são tão óbvias para o desenvolvedor neófito. Descobrir que uma classe viola o princípio de substituição de Liskov, por exemplo, não é uma tarefa fácil; exige muito conhecimento e reflexão sobre o código.

Andrew Binstock, editor da Dr.Dobbs, cita uma excelente dica em seu artigo publicado na edição desse mês (In Praise of Small Classes). Ele fala de uma parâmetro bastante tangível para identificarmos um código mal projetado: o tamanho de uma classe. Segundo Binstock, tal parâmetro é colocado por Jeff Bay no livro “The ThoughtWorks anthology”, e estabelece o valor de até 60 linhas de código. Acima disso teríamos um indício de que a classe precisa perder responsabilidades através de refatoração.

O pequeno artigo transcorre sobre os conhecidos efeitos colaterais de código OO mal projetado sobre os testes. Vale a pena a leitura!

Clique aqui.

Se meu Kindle falasse

Como muitos dos consumidores de tecnologia, sempre recorro à internet antes de decidir pela compra deste ou daquele produto. Durante a pesquisa, procuro identificar opiniões isentas de interesses comerciais. Por exemplo, será que todas as resenhas postadas no site da Amazon, no caso sobre o Kindle, são totalmente livres de moderação e refletem, de maneira íntegra, as opiniões dos clientes do produto? Será que a empresa não dá destaque àqueles comentários mais elogiosos? Não estou querendo com isso levantar dúvidas sobre a lisura da Amazon, mas me sinto compelido a acreditar que a empresa tende, por motivos naturais, a evitar comentários que possam ser prejudiciais à imagem do seu produto.

Posto isso, coloco aqui em meu blog minha opinião – isenta de qualquer interesse que não seja a verdade sob meu ponto de vista –  para ajudar os incautos consumidores em busca de uma melhor visão do produto, que proporcione uma decisão de compra com melhor embasamento de informações. Essas minhas notas são feitas dois meses após adquirir o meu Kindle, versão 3, de 7 polegadas, modelo que só possui Wi-Fi.

O produto impressiona pelo diminuto peso, duração da bateria e pela clareza com que as letras são apresentadas na tela. Fiquei positivamente contente com o que obtive por módicos R$ 260,00 pelos quais o produto pode ser adquirido se trazido dentro da cota de U$ 500 por um turista em visita aos EUA. Entretanto, tinha expectativas que foram frustadas logo no primeiro livro que adquiri: “O mítico homem-mês”, de Frederick Brooks; ou “The Mythical Man-Month”, título em inglês, que foi o que adquiri no site da Amazon. Vamos listar as desvantagens:

– O aparelho é péssimo para visualizar imagens: alguns figuras no livro mencionado eram praticamente ilegíveis no dispositivo. Embora alguns produtos no site na Amazon alertem claramente para a não adequação do título para leitura no e-reader, não era o caso deste livro que comprei.

– O formato proprietário AZW: embora o aparelho suporte alguns formatos além deste proprietário, não suporta o formato  ePub, que está sendo o adotado por várias editoras nacionais. Ou seja, se o livro não for vendido pela Amazon, você só o poderá ler no Kindle se transformar para um dos formatos suportados (PRC e MOB, por exemplo).

– Pouca disponibilidade de títulos em Português: consequência do item citado anteriormente.

– PDF formatado com A4, nem pensar: na verdade eu já tinha sido alertado sobre isso, mas confesso que fiquei na expectativa do produto me surpreender nesse quesito. Mas não surpreendeu. Alguns artigos técnicos, que são frequentemente publicados neste formato, são de péssima leitura e visualização no aparelho.

Conclusão: recomendo o produto, mas principalmente para aqueles leitores que gostam de ler títulos em inglês, comprados pela Amazon, e que contenham somente texto, como obras literárias em geral. Não recomendo para aqueles que querem ler livros ou artigos técnicos. Recomendo para estes últimos uma análise da versão do Kindle de 9 polegadas. Nesse tamanho de tela, um arquivo PDF A4 pode ser visualizado de maneira completa na tela, sem necessidade de rolagens ou ampliações.

Boa compra!

Propriedade versus Atributo

Frequentemente escuto alunos e colegas de profissão usar como sinôminos esses dois termos relacionados à UML. Mas existe diferença entre propriedade e atributo?

Segundo [Fowler, 2005], propriedade é uma “característica estrutural de uma classe”. Mas o que exatamente é uma característica estrutural, visto que uma classe é uma representação estática de parte de um sistema? Não seria tudo que é representado nela uma característica estrutural? Bem, o que Fowler tenta diferenciar são dois tipos de características que uma classe possui: propriedades e operações. As propriedades de uma classe são elementos que determinam o que uma classe é – por isso são ditas características estruturais – enquanto as operações deteminam o que uma classe pode fazer – portanto são características comportamentais.

Colocando de maneira mais objetiva, a propriedade refere-se a qualquer atributo ou associação que uma classe possui. Embora os conceitos de atributo e associação sejam semelhantes, elem implicam níveis de abstração diferentes de uma característica estrutural. Mas, de uma forma geral, podemos usar tanto atributo quanto uma associação para representar o mesmo conceito. A decisão sobre qual usar cabe ao engenheiro de software, dependendo no nível de destaque que ele deseja dar ao tipo que a propriedade possui.

Atributo

De forma grosseira, podemos entender o atributo como um campo de uma classe: um elemento de informação básico que identifica uma característica fortemente relacionada com aquela classe que o contém. Por exemplo, numa classe Cliente, seria comum representar a propriedade nome como um atributo, não como uma associação (embora nada impeça essa última forma), como na figura 1.

Figura 1 – Classe Cliente com propriedade representada como atributo

Associação

Da mesma forma que o atributo, uma associação representa uma propriedade de uma classe, só que representada por meio gráfico – uma linha ligando as classes – combinada com notações textuais (multiplicidades e nome do atributo de associação). A diferença fundamental da representação por meio de associação reside no destaque que é dado ao tipo de dado (classe) ao qual o elemento de informação está relacionado. Esse destaque procura dar ao leitor do modelo melhor compreensão sobre um elemento de informação que, provavelmente, é compreendido dentro do contexto de domínio da aplicação, mas não necessariamente fora dele. Por exemplo, se na classe Cliente eu desejo representar a propriedade que ele pode ter um Cartão, provavelmente representarei esse conceito por meio de associação, uma vez que o conceito Cartão depende muito do contexto onde ele se aplica (cartão de crédito, num sistema bancário; um cartão de visitas, num sistema de contatos, etc.). Ou seja, é importante destacar o tipo da classe à qual a propriedade pertence, até mesmo porque a classe Cartão, por sua vez, pode necessitar representar outras propriedades não óbvias para o leitor: número do cartão, tipo de bandeira (visa, mastercard, etc.), tipo de pagamento (à crédito ou à vista), etc. Veja a figura 2.

Figura 2 – Propriedade cartão representada como associação

Por outro lado, no caso do atributo nome da classe Cliente, qual seria a relevância de explicitar que tal propriedade é do tipo String? Ou ainda, não seria simplificar demais nosso modelo, incorrendo em imprecisão, representar a propriedade cartão como um atributo? Veja o mesmo modelo da figura 2, invertendo as representações, na figura 3. Qual deles é mais elucidativo?

Figura 3 – Propriedades representadas de forma invertidada

Conclusão

Uma propriedade pode ser representada tanto como atributo quanto como associação. A escolha por representar de uma ou outra forma depende do destaque que o engenheiro deseja dar ao tipo da propriedade. Se ele for dependente do domínio de aplicação sendo desenvolvido, é sempre conveniente representá-lo como associação. As demais propriedades, cujo tipo são de uso geral (String, int, Date,etc.), são melhor representadas como atributos.

Referências

[Fowler, 2005] Fowler, F. UML Essencial. 3ª edição. 2005. Editora Bookman.

Artigo de Projeto de Software O.O. para neófitos

Recebi a indicação de um colega de trabalho sobre esse artigo que trata de projeto de software orientado a objeto. Mas o quê torna este especial comparado aos milhares que existem na WEB: a forma didática como o tema é tratado. Com o título (em tradução livre) ‘Como ensinei Projeto de Soft. OO para minha esposa’, que em princípio pareceu-me jocoso tal qual na série ‘XXX for dummies’, surpreendeu-me com a forma aprazível de introdução para um tema complexo, que permite despertar o interesse dos neófitos para uma leitura mais aprofundada dos princípios elementares de projeto de software O.O., conhecidos popularmente como SOLID (cunhado por Uncle Bob).

Uma citação feita do artigo chamou-me a atenção (novamente em tradução livre):

“Desenvolver software a partir dos requisitos e andar sobre água é fácil desde que ambos estejam congelados.”, do autor (Edward V. Berard )

Segue o link abaixo. Vale a leitura!

How I explained OOD to my wife

Convém Sonhar

Convém sonhar

Por Miriam Leitão (coluna publicada no O Globo, 29/6/2008)

Manezão gostava de brincadeiras brutas, agressivas. Um senso de humor esquisito. Era o chefe de disciplina do colégio. Ele entregou ao mais franzino dos dois meninos pobres de Garanhuns, que entravam na escola pela primeira vez, um balde e uma vassoura e disse: “Este é seu lápis, este é seu caderno!” Eles teriam que trabalhar na limpeza para ter bolsa para estudar no renomado colégio XV de Novembro.

A mãe dos meninos tinha pedido bolsa aos diretores durante um encontro na escola dominical, na Igreja Presbiteriana. Analfabeta, extremamente pobre, queria que os filhos estudassem. Sonho antigo e persistente. Foi por ele que decidiu sair de Recife e tentar a sorte no interior do estado.

— Vamos para Garanhuns que os meninos precisam estudar — disse ao marido.

Eram os anos 20 do século passado. O analfabetismo era dominante no Nordeste; ela queria para os filhos outro destino. Bolsa, os diretores americanos, que fundaram o colégio, avisaram que não davam. Mas aceitaram que dois deles estudassem de graça, se concordassem em trabalhar no colégio. O mais velho dos dois irmãos que ganharam a bolsa-trabalho tinha 13 anos; o mais novo, 11. Anos depois, a família conseguiu que entrasse nesse grupo o caçula, então com 7 anos.

De tarde, eles varriam as salas e lavavam os banheiros. De madrugada, espanavam as carteiras e mesas. Depois iam para a aula como todos os alunos. A mãe orientava que só vestissem o uniforme após terminada a limpeza e depois que se limpassem no banheiro do colégio. Ela sempre entregava a eles uniformes limpinhos, que, às vezes, secava no ferro durante a noite. Nem sempre estavam bem alimentados.

— Trabalhávamos para estudar e ainda passávamos fome — relatou recentemente o mais novo dos irmãos.

Foram eternamente gratos à oportunidade que receberam e retribuíram estudando muito. Os três foram alunos brilhantes, de pontuar nos primeiros lugares, de queimar etapas com provas no estilo supletivo.

Orientados pelos diretores e professores do XV de Novembro, continuaram seus estudos para além do ginásio, além de Pernambuco. Os três foram para o seminário presbiteriano em Campinas. O curso era apertado, nota mínima 8. Estudava-se não apenas teologia. Saía-se de lá com várias licenciaturas, para o trabalho de professor do ensino médio. No seminário, o menino que recebera de Manezão o balde e a vassoura tinha tão bom desempenho, esforçava-se para falar português tão irretocável, que recebeu o apelido de “mulatinho pernóstico”.

Ele dava de ombros, porque sabia dos seus sonhos e estava decidido a realizá-lo: sonhava dirigir um colégio e, quando estivesse nesta situação de poder, dar bolsa a meninos pobres, como ele, que teriam então a chance que teve. Era isso que pedia nas orações que costumava fazer num morro de Garanhuns chamado Monte Sinai. Passava por lá entre um biscate e outro que fazia — de vendedor na feira a pintor — para ajudar a renda baixíssima e instável da família. O pai era pedreiro em frente de obras, nem sempre tinha trabalho e renda.

Quando se mudou, aos 28 anos, para o Vale do Rio Doce, fundou, em Caratinga, junto com outros líderes locais, o primeiro ginásio da região. Como diretor, fazia exatamente aquilo a que se propôs na adolescência: distribuía muita bolsa de estudo. Não o fazia em troca de trabalho. A alguns dos bolsistas mais velhos, muito pobres, também ofereceu trabalho assalariado no colégio.

Os três se dedicaram à educação, os três se dedicaram à igreja. Dividiam-se entre as duas frentes de trabalho. Como acreditavam no ensino laico, não misturavam as duas. Foram excelentes professores nas escolas onde ensinaram. Foram brilhantes oradores nas igrejas.

A fé em Deus era inabalável, a paixão laica que tiveram era a educação. O mais novo e o mais velho também fizeram Direito. Dos três, o mais dedicado à educação foi o do meio, exatamente o menino franzino que tinha recebido o balde e a vassoura. Além do colégio que fundou e fez prosperar em cursos superiores, abriu escolas públicas em outras cidades, a pedido do governo do estado, na época da interiorização do ensino fundamental em Minas Gerais. Ele mesmo estudou a vida inteira, como autodidata e leitor voraz, os mais variados assuntos: da filosofia à física quântica.

Tiveram sempre orgulho de terem trabalhado para conquistar o direito de estudar num colégio de excelente qualidade de ensino. Nunca se deram conta de que trabalhar cedo demais era um absurdo. Achavam que foi uma troca justa à qual lhes coube corresponder. De Manezão, vingaram-se fazendo dele uma figura folclórica nas famílias que constituíram. “Brincadeira de Manezão” passou a ser a expressão que designava a atitude de humor grosseiro, da pessoa que agride, quando tenta brincar.

O mais velho, Boanerges, morreu aos 62 anos. O mais novo, Nathanael, está vivo e lúcido aos 85 anos. O do meio, o menino franzino, alvo da brincadeira do Manezão, é Uriel, o meu pai. Ele morreu exatamente há 10 anos, em 29 de junho de 1998. Quando estava velando seu corpo, um homem se aproximou de mim e disse que tinha sido menino de rua até que meu pai lhe deu bolsa no colégio e no internato, e tinha virado juiz de direito. Outro contou que trabalhava na roça, era analfabeto, até a visita do meu pai. Passou a estudar e virou gerente de banco. Histórias assim foram me enchendo de orgulho naquele dia difícil.

Nathanael, meu tio, fez o sermão do culto de ação de graças pela vida dele. Ao lado do corpo do irmão, começou dizendo: “Este homem sonhou. Convém sonhar.” Essa história sedimentou em mim a confiança na força da educação.

Oracle adquire a Sun

Hoje recebi comunicado da Oracle anunciando de forma oficial e definitiva a fusão com a Sun. Imagino que o último entrave, colocado pela União Européia, tenha sido superado.
No e-mail de anúncio, o presidente da Oracle reafirma o que vinha sendo anunciado na imprensa, meses antes dessa oficialização, sobre a continuidade da políticas de software aberto adotadas pela Sun, embora a Oracle seja reconhecida com uma empresa que não adota tais práticas. Bom, pelo menos até o momento.
O mercado todo se pergunta: como ficarão produtos como o MySQL? A Oracle tem seu produto voltado para o mercado de entrada, para pequenas empresas e bancos voltados para a Web, que é o Personal Oracle. Embora no último Sun Tech Days, num dos estandes de propaganda do MySQL, o propagandista alardeava que o mercado do MySQL é totalmente diferente do da Oracle, sabemos que isso não é plenamente a verdade. O MySQL, de fato, tem características que simplificam o uso para emprego do SGBD em sites WEB. Mas o quanto a solução da Oracle está hoje longe disso?
Outra questão: o GlassFish, o servidor referência da Sun para o JEE6, colide com o servidor da Oracle, o WebLogic. Qual será o futuro desse produto?
Essas questões não serão respondidas por meios oficiais, mas eu aposto que várias iniciativas internas já estão sendo tramadas na Oracle para descontinuar – de forma gradual – os produtos gratuitos da ex-Sun que hoje colidem com os pagos da Oracle.
Uma questão especial sobra para o NetBeans: o produto de Oracle, pago e caro, esta ano luz atrás dessa excelente IDE. Qual será a estratégia da Oracle aqui?
Aguardemos… quem quiser saber mais, clique aqui.

Google no mundo Java

A Google entra de forma definitiva no mundo Java ao criar a iniciativa conhecida como Guava. Agora, a Apache Software Foundation tem uma fortíssima concorrente como fornecedora de bibliotecas e frameworks para o mundo Java.

Uma das mais recentes contribuições da empresa para o mundo do desenvolvimento Java é o que  eles chamam de Google Collections Library, uma biblioteca de classes voltada para coleções de objetos, que agregam funcionalidades novas em relação à biblioteca padrão do Java no pacote java.util.

Fornecer e controlar soluções que moldam o desenvolvimento de uma determinada plataforma é uma forma de controle com consequências pouco conhecidas. Qual o objetivo de fornecer de graça uma biblioteca ou um framework, visto que eles são tão caros para desenvolver e manter? Por quais formas essas empresas esperam auferir lucros para pagar esses enormes gastos?

O importante é o foco

Meu pai me mandou essa piadinha por e-mail. Impressionante é o quanto ela se aplica à engenharia de software.

O IMPORTANTE É O FOCO…

Um paciente vai num consultório e diz ao psiquiatra:
– Toda vez que estou na cama, acho que tem alguém embaixo. Aí eu vou embaixo da cama e acho que tem alguém em cima. Pra baixo, pra cima, pra baixo, pra cima. Estou ficando maluco!
– Deixe-me tratar de você durante dois anos. – diz o psiquiatra.
– Venha três vezes por semana, e eu curo este problema.
– E quanto o senhor cobra? – pergunta o paciente.
– R$ 120,00 por sessão – responde o psiquiatra.
– Bem, eu vou pensar – conclui o sujeito.
Passados seis meses, eles se encontram na rua.
– Por que você não me procurou mais? – pergunta o psiquiatra.
– A 120 paus a consulta, três vezes por semana, dois anos =R$ 37.440,00, ia ficar caro demais, ai um sujeito num bar me curou por 10 reais.
– Ah é? Como? – pergunta o psiquiatra.
O sujeito responde:
– Por R$ 10,00 ele cortou os pés da cama…
Muitas vezes o problema é sério, mas a solução pode ser muito simples…
HÁ GRANDE DIFERENÇA ENTRE FOCO NO PROBLEMA E FOCO NA SOLUÇÃO…
Foque uma solução ao invés de ficar pensando no problema.