Vale a pena? - Faculdades Integradas do Vale do Ivaí · ma de graduação, e para concursos de...

8
: : www.mundoj.com.br : : Rafael Pereira ([email protected]): ([email protected]): é bacharel em Ciência da Computação pela UERJ (2004), mestre em Computação pela UFF (2009) e cursa o doutorado em Computação na UFF. Trabalhou em empresas privadas (Accenture, EDS), públicas (Banco Central) e atualmente é analista do BNDES. Autor de dois livros técnicos de Java e possui as certificações SCJP, SCWCD, JBoss, Oracle e Linux (LPI-1). Site: www.rbper.com Alexandre Gazola ([email protected]): é bacharel em Ciência da Computação pela Universidade Federal de Viçosa (UFV) e mestre em Informática pela PUC-Rio. Trabalha como analista de Sistemas no BNDES e possui as certificações SCJP e SCWCD. Mantem um blog em http://alexandregazola.wordpress.com e Twitter em: http:// twitter.com/alexandregazola. Entenda os atrativos da carreira pública e fique por dentro de alguns temas recorrentes nas provas Concursos públicos na área de TI: Vale a pena? aprovação em concursos públicos é uma busca recor- rente para milhões de brasileiros. De acordo com um estudo do IPEA de 2009, o serviço público emprega 8,2 milhões de funcionários, mais de um quinto do total de pessoas empregadas no País. As carreiras públicas possuem alguns atrativos que, muitas vezes, não são encontrados na iniciativa privada, como, por exemplo: estabilidade, benefícios diversos, ambiente de trabalho agradável, incentivo para especialização e participação em congressos e boa remuneração. Como em praticamente todos os setores da indús- tria e serviços na sociedade atual, profissionais de TI também estão entre os mais demandados em empresas e órgãos públicos; e muitos profissionais da nossa área têm visado esse tipo de carreira. Será que vale mesmo a pena? E a estagnação da qual as pessoas tanto falam? Neste artigo, discorreremos um pouco sobre os principais atra- tivos da carreira pública. Destacaremos as principais vantagens de ser um profissional concursado de forma geral e, em seguida, analisaremos brevemente a questão na ótica de um profissional de TI (vantagens e desvantagens). Ao final, comentaremos bre- vemente a respeito dos concursos (formato das provas, tipos de questões etc.) e apresentaremos um pequeno simulado, com questões extraídas de concursos reais, que o leitor poderá utilizar para testar seus conhecimentos e se familiarizar com os assuntos que costumam ser cobrados. Nesse simulado, nosso foco recairá Nos últimos anos, parece haver aumentado o interesse de profissionais da área de TI na carreira pública. Boas condições de trabalho, problemas desafiadores a serem resolvidos, benefícios diversos e remuneração atrativa têm despertado o interesse de muitos dos melhores desenvolvedores de software para a iniciativa pública. Nos concursos, é recorrente encontrarmos questões relacionadas à linguagem e à plataforma Java, orientação a objetos, padrões de projeto e tecnologias voltadas para a web. Neste artigo, falamos um pouco sobre as vantagens e desvantagens da carreira pública na área de TI e trazemos também um simulado comentado que explora algumas dessas questões de tecnologia nos principais concursos. 42

Transcript of Vale a pena? - Faculdades Integradas do Vale do Ivaí · ma de graduação, e para concursos de...

: : www.mundoj.com.br : :

Rafael Pereira

([email protected]): ([email protected]): é bacharel em Ciência da Computação pela UERJ (2004), mestre em Computação pela UFF (2009) e cursa o doutorado em Computação na UFF. Trabalhou em empresas privadas (Accenture, EDS), públicas (Banco Central) e atualmente é analista do BNDES. Autor de dois livros técnicos de Java e possui as certificações SCJP, SCWCD, JBoss, Oracle e Linux (LPI-1). Site: www.rbper.com

Alexandre Gazola

([email protected]): é bacharel em Ciência da Computação pela Universidade Federal de Viçosa (UFV) e mestre em Informática pela PUC-Rio. Trabalha como analista de Sistemas no BNDES e possui as certificações SCJP e SCWCD. Mantem um blog em http://alexandregazola.wordpress.com e Twitter em: http://twitter.com/alexandregazola.

Entenda os atrativos da carreira pública e �que por

dentro de alguns temas recorrentes nas provas

Concursos públicos na área de TI:

Vale a pena?aprovação em concursos públicos é uma busca recor-rente para milhões de brasileiros. De acordo com um estudo do IPEA de 2009, o serviço público emprega 8,2

milhões de funcionários, mais de um quinto do total de pessoas empregadas no País.

As carreiras públicas possuem alguns atrativos que, muitas vezes, não são encontrados na iniciativa privada, como, por exemplo: estabilidade, benefícios diversos, ambiente de trabalho agradável, incentivo para especialização e participação em congressos e boa remuneração. Como em praticamente todos os setores da indús-tria e serviços na sociedade atual, profissionais de TI também estão entre os mais demandados em empresas e órgãos públicos; e muitos profissionais da nossa área têm visado esse tipo de carreira. Será que vale mesmo a pena? E a estagnação da qual as pessoas tanto falam?

Neste artigo, discorreremos um pouco sobre os principais atra-tivos da carreira pública. Destacaremos as principais vantagens de ser um profissional concursado de forma geral e, em seguida, analisaremos brevemente a questão na ótica de um profissional de TI (vantagens e desvantagens). Ao final, comentaremos bre-vemente a respeito dos concursos (formato das provas, tipos de questões etc.) e apresentaremos um pequeno simulado, com questões extraídas de concursos reais, que o leitor poderá utilizar para testar seus conhecimentos e se familiarizar com os assuntos que costumam ser cobrados. Nesse simulado, nosso foco recairá

Nos últimos anos, parece haver aumentado o interesse de profissionais da área de TI na carreira pública. Boas condições de trabalho, problemas desafiadores a serem resolvidos, benefícios diversos e remuneração atrativa têm despertado o interesse de muitos dos melhores desenvolvedores de software para a iniciativa pública. Nos concursos, é recorrente encontrarmos questões relacionadas à linguagem e à plataforma Java, orientação a objetos, padrões de projeto e tecnologias voltadas para a web. Neste artigo, falamos um pouco sobre as vantagens e desvantagens da carreira pública na área de TI e trazemos também um simulado comentado que explora algumas dessas questões de tecnologia nos principais concursos.

42

43

em conteúdo relacionado à linguagem e à plataforma Java, OO, padrões de projeto e tecnologias web, que são assuntos frequentes em concursos na área de TI.

Motivação da carreira pública: vantagens e desvantagens

Quais seriam as principais diferenças entre a carreira na iniciativa pública e a carreira na iniciativa privada? Estabilidade garantida? Ambiente de trabalho sem pressão? Falta de desafios e estagnação? Remuneração adequada? Nesta seção, vamos analisar algumas dessas questões considerando também o foco em TI.

A estabilidade dos servidores públicos é um direito garantido cons-titucionalmente, e assegura o emprego do concursado sob o regime estatutário (ex.: Receita Federal, Policia Federal, BACEN, CVM etc.). Esse benefício é justificado pela manutenção do interesse público, qualificação profissional e eficiência da administração, pois o servi-dor não será dispensado por fatores políticos. Além disso, ele poderá executar o seu trabalho com autonomia e sem ir contra as suas atri-buições devido a interesses da sua chefia superior (assédio moral). Lembramos também que existem empresas públicas e de economia mista sob o regime CLT (ex.: Banco do Brasil, Petrobras, Correios, BNDES, Eletrobrás etc.), nas quais o benefício de estabilidade não é oficialmente assegurado, embora na prática as demissões não sejam comuns.

Um bom ambiente de trabalho é vital para a satisfação pessoal de qualquer profissional. Isso passa por questões como uma boa rela-ção entre colegas e com os superiores; e um espaço físico agradável; recursos computacionais de hardware e software adequados; carga de trabalho equilibrada; e nível de motivação dos funcionários. Na maioria destes aspectos, não há uma diferença tão grande entre a iniciativa pública e a iniciativa privada.

Contudo, não podemos deixar de ressaltar que a iniciativa privada está cheia de exemplos do que é ter um ambiente com uma excessiva carga de trabalho, cheio de estresse e baixa motivação e produtivida-de por parte dos colaboradores. Existem empresas em que hora extra é a regra, e não a exceção. Ainda neste ponto, queremos também combater o estereótipo do funcionário público como aquele indiví-duo que chega no trabalho, coloca o paletó na cadeira e não faz nada o dia inteiro. Certamente, existem órgãos em que isso é verdade, mas existem diversos lugares em que a realidade é completamente outra. Várias empresas públicas precisam desenvolver constantemente siste-mas para atender a sociedade e as demandas de órgãos reguladores em que os prazos são muitas vezes bastante apertados, o que não deixa espaço para pessoas acomodadas.

Outra vantagem menos aparente, mas que é um atrativo para muitos é a certeza de que o concurso público não irá cometer nenhum tipo de discriminação com base no sexo, raça ou cor, credo religioso e idade. Esta última pode ser um empecilho na iniciativa privada, e especialmente na área de TI, pois com o rápido avanço dos proces-sos e das tecnologias é necessário que o profissional esteja sempre atualizado e em sintonia com o mercado. Nos órgãos públicos de ponta, a atualização tecnológica é acompanhada por consultorias especializadas e pela capacitação do corpo funcional.

Um fenômeno que afetou algumas empresas da iniciativa privada, especialmente na área de TI, foi a precarização dos direitos dos tra-

balhadores (ex.: contratação sob os regimes PJ, CLT Flex etc.). Na iniciativa pública ocorreu o contrário: para atrair profissionais capaci-tados, os salários foram elevados e a oferta de benefícios cresceu (ex.: plano de saúde e odontológico, auxílio-educação, jornada flexível, licença capacitação, entre outros).

Poder realizar um trabalho que vai contribuir de maneira direta para o Brasil também é um fator que traz motivação para muitas pessoas.

Porém, nem todas as carreiras do serviço público podem ser atrativas para os profissionais de TI. A realidade mostra que muitos órgãos ain-da estão bastante defasados tecnologicamente, em geral pela falta de recursos para investimento. Esse cenário está mudando, como pode ser atestado conforme relatado nos quadros “Depoimentos”.

Formato das provas, concorrência, técnicas de estudo

Tendo em vista a quantidade de benefícios oferecida pelos di-versos órgãos públicos e empresas estatais, a concorrência tem se tornado cada vez mais acirrada. É comum encontrar entre os aprovados para concursos de nível médio candidatos com diplo-ma de graduação, e para concursos de nível superior candidatos com especialização e/ou mestrado.

Os concursos mais concorridos possuem uma relação candidato/vaga maior do que os vestibulares mais disputados. Para driblar a concorrência, candidatos buscam cada vez mais os cursos prepa-ratórios – a busca aumentou de 15 a 20% em 2009. Soma-se a isso o custo de livros e apostilas sobre os temas constantes nos editais, e conclui-se que nem sempre o investimento é barato. Apesar da elevada concorrência, grande parte dos candidatos não se prepara adequadamente, além de muitos não comparecerem.

As provas de concursos são em geral de múltipla escolha e de caráter eliminatório, podendo conter questões discursivas ou redação. Exige-se do candidato um amplo conhecimento sobre uma gama de assuntos na área em questão. Na área de TI é fre-quente a cobrança de assuntos como Banco de Dados, Redes de Computadores e Internet, Sistemas Operacionais, Linguagens de Programação, Gerência de Projetos e Governança em TI.

A preparação para as provas já foi assunto para vários livros sobre concursos públicos.Embora cada candidato tenha um ritmo e ca-racterística de aprendizado diversos, em geral ele deve favorecer o tempo e organização do estudo, um domínio mais generalista sobre os assuntos cobrados, o foco nos resultados, e a realização de provas anteriores.

Alguns candidatos podem se beneficiar pelo uso de técnicas de memorização (ex: mnemônicos), leitura dinâmica, um talento natural para certo tipo de assunto – mas, em geral, o tempo de estudo é um fator pessoal e determinante para o resultado final, tal qual as horas de voo de um piloto de avião, ou as horas de treino de um músico de uma orquestra.

Cargos de informática e tecnologias (Java, OO, Web)

Antes de entrarmos em algumas questões importantes relacionadas à tecnologia que todo candidato bem preparado deve conhecer, vamos falar um pouco a respeito da motivação para realizar um concurso público na área de TI especificamente. Mesmo com todos

44

: : www.mundoj.com.br : :

os pontos positivos já enumerados anteriormente, será que vale mesmo a pena fazer um concurso em TI?

De acordo com Diogo Gobira, um dos representantes do site prepa-ratório Handbook de TI, alguns atrativos dos empregos públicos na área de TI são a não exigência de experiência prévia, certificações e indicações de terceiros. Isso torna a disputa pelas vagas mais demo-cráticas e acessíveis para profissionais de perfis e idades diversos.

Uma questão importante a se considerar são as oportunidades de crescimento. Os bons profissionais de TI são pessoas que estão constantemente se atualizando, gostam de aprender e querem con-tribuir e crescer em suas carreiras. A possibilidade de realizar cursos e participar em eventos e conferências sobre desenvolvimento de software com patrocínio da empresa é algo muito interessante e isso é apoiado por diversas empresas do setor público. Na iniciativa privada, ainda são poucas as empresas que fornecem esse tipo de incentivo de forma contínua e consistente.

Outro quesito que precisa ser levado em conta é o nível de mo-tivação dos funcionários, o qual, em TI, passa por dois aspectos: negócio e tecnologia. Queremos resolver problemas interessantes usando tecnologia interessante. Na vertente de negócio, existem empresas públicas e privadas em diversos segmentos com os mais variados e interessantes problemas a serem resolvidos. É na vertente de tecnologia que as empresas privadas ainda acabam se sobressain-do. Em muitas empresas do setor público, ainda é preciso conviver com sistemas legados de tecnologia mais antiga (ex.: mainframe, COBOL, NATURAL, ADABAS, Delphi etc.) e o uso de tecnologia mais nova às vezes é restrito a versões mais antigas (ex.: Asp; Java 1.3; JSF 1.1, EJB 2.1 etc.). O nível de burocracia em empresas pú-blicas, devido, muitas vezes, às exigências de órgãos externos de controle, também é um fator que muitas vezes entrava a adoção das boas práticas, tais como desenvolvimento iterativo e incremental, foco no produto e eliminação de desperdício, tão promulgados pelos métodos ágeis e o desenvolvimento lean.

No entanto, a realidade em muitas empresas públicas está mudando tanto na questão tecnológica quanto de processos, atenuando essa deficiência. Com a grande popularização da Web e da plataforma Java, cresceu o desenvolvimento de projetos com essas tecnologias. Uma das suas vantagens é que elas não são tecnologias proprietárias (embora a implementação da Sun/Oracle o seja). Com isso, elas se tornaram uma opção cada vez mais frequente no conteúdo progra-mático apresentado nos editais.

Bom, após essa breve explanação, esperamos que o amigo leitor esteja enxergando a iniciativa pública de uma forma mais favorá-vel e menos estereotipada. Sendo assim, vamos ao que interessa: tecnologia!

Atualmente as provas contam com 20 a 40% de conteúdo relacio-nado com as tecnologias voltadas para Web (HTML, XML, CSS, Web Services etc.), Java (linguagem e plataforma), Orientação a Ob-jetos e Padrões de Projeto. Essa é uma ótima oportunidade para que profissionais Java/Web capacitados ingressem no serviço público.

A seguir, será apresentado um pequeno simulado com 15 questões objetivas nos assuntos supracitados, com questões retiradas de diversos concursos, que são temas recorrentes da Revista MundoJ.

Simulado: questões

Escolher uma alternativa

Q1. (2009, FUNRIO – FURNAS, Tecnologia da Informação) Na orientação a objetos, classes que NÃO geram instâncias diretas (objetos) são denominadas classesa) primárias.b) abstratas.c) virtuais.d) básicas.e) derivadoras.

Q2. (2009, ESAF – ANA, Analista Administrativo) Se, na super-classe, um método é declarado protected, o(s) modificador(es) aplicável(is) na sobrescrita do método é(são)a) private.b) private e protected.c) “default”.d) protected, “default” e public.e) protected e public.

Q3. (2005, NCE-UFRJ – BNDES, Analista de Sistemas) Observe o seguinte trecho de código em Java:

Os possíveis valores para xx no código anterior são:a) somente m1;b) somente m2;c) somente m1 e m2;d) m1 e m3;e) m1, m2 e m3.

//Código da Q3

interface I1 {

public void m1();

}

interface I2 extends I1 {

public void m2();

}

class C1 implements I2 {

// o código da classe C1 segue aqui

}

public class Teste {

public void m3() {

// o código do método m3() segue aqui

}

public static void main(String args[]) {

I1 obj = new C1();

obj.xx(); // substitua xx pela

// resposta apropriada

}

}

45

Q4. (2008, ESAF – STN, Analista de Finanças e Controle) O que fazer para forçar a coleta de lixo de um objeto, em Java? Indique a opção correta.a) Invocar finalize().b) Remover todas as referências ao objeto.c) Invocar Runtime.gc().d) Invocar System.gc().e) A coleta de lixo não pode ser forçada.

Q5. (2010, CESGRANRIO – Banco Central, Analista) Uma ins-tituição financeira desenvolverá um novo sistema de informação WEB com base na plataforma Java EE 5. Os programadores devem ter ciência de que, na linguagem de programação Java e tecnologias relacionadas, NÃO é a) possível listar, por meio da Reflection API, que anotações foram

colocadas em um parâmetro de um método. b) possível obter, por meio da Reflection API, as interfaces que

determinada classe implementa.c) importante declarar métodos como “final”, sempre que possí-

vel, para obter aumento de, pelo menos, 50% no desempe-nho, na JVM da Sun.

d) importante, por questões de desempenho, evitar utilizar méto-dos “synchronized”, quando possível.

e) necessário fechar, explicitamente, objetos JDBC como Result-Set, sob pena de vazamento de memória (memory leak), na conexão com alguns bancos de dados.

Q6. (2009, CESGRANRIO – BNDES, Analista de Desenvolvi-mento) Ao estudar as especificações e frameworks Java EE, um Analista de Sistemas concluiu que:a) o container WEB do servidor de aplicações é o responsável por

gerenciar o ciclo de vida de servlets e de EJBs utilizados numa aplicação Java.

b) no container WEB, uma página JSP transforma-se em um serv-let, que é compilado, carregado e inicializado.

c) Enterprise JavaBeans é um modelo de componentes padroniza-do, executado no lado do cliente e que facilita a construção de aplicações distribuídas robustas.

d) STRUTS é um framework de persistência que permite o geren-ciamento de dados relacionais, utilizando-se de mapeamento objeto-relacional.

e) a utilização de Java Persistent API obriga o uso de um container EJB com Session Beans.

Q7. (2007, FCC – TER-SE, Analista de Sistemas) Sendo um gru-po de classes e componentes responsáveis pelo armazenamento e recuperação de dados, esta camada inclui necessariamente um modelo das entidades do domínio de negócios (mesmo que seja somente um modelo de metadados). No âmbito do mapeamento objeto-relacional (Hibernate) esta é a camada dea) negócio.b) restrição.c) apresentação.d) consistência.e) persistência.

Q8. (2009, CESGRANRIO – BNDES, Analista de Desenvolvimen-to) O presidente de uma empresa determinou que fosse disponi-bilizado um sistema de vendas na Internet. No entanto, o software de controle de estoque que deve ser acessado pela aplicação de vendas é muito antigo e provê uma API (Application Programming

Interface) de uso muito complicado. Para que os desenvolvedores possam acessar uma interface mais simples, o arquiteto do sistema pode determinar o uso do padrão de projetoa) Prototype.b) Decorator.c) Observer.d) Façade.e) Flyweight.

Q9. (2009, Comperve – UFRN, Desenvolvedor de Software) O padrão de projeto JEE (Java Enterprise Edition) cuja finalidade é encapsular as operações de lookup e complexas interfaces de operações de rede é oa) Front Controller.b) Service Locator.c) Transfer Object.d) NetworkProxy.e) Data Access Object.

Q10. (2005, FCC – Banco Central, Analista de Sistemas) Java, como tecnologia de desenvolvimento de software, significa:a) uma plataforma, somente, composta de computador, sistema

operacional e ambiente de execução Java (JRE).b) uma linguagem, somente, composta por um conjunto de pala-

vras e símbolos utilizados para escrever programas.c) um ambiente de desenvolvimento, somente, composto de fer-

ramentas para construção de aplicativos.d) interfaces de programas aplicativos (API), somente, compostos

de classes e interfaces já existentes para o uso.e) a junção de uma linguagem, de um ambiente de desenvolvi-

mento e de APIs, somente.

Q11. (2009, FUNRIO – FURNAS, Tecnologia da Informação) Considere uma classe ContaBancária e suas duas subclasses Con-taCorrente e ContaPoupança, cada uma das três com o método AplicarJuros. A redefinição do método AplicarJuros nas duas subclasses, cada uma com detalhes de implementação diferentes com a mesma interface, caracteriza o princípio denominado na orientação a objetos comoa) abstração.b) encapsulamento.c) herança.d) unificação.e) polimorfismo.

Q12. (2009, CESGRANRIO – BNDES, Analista de Desenvolvi-mento) Qual das afirmações a seguir faz uma apreciação correta a respeito da linguagem de programação Java?a) O conceito de herança múltipla é implementado nativamente.b) Uma classe pode implementar somente uma interface ao mes-

mo tempo.c) Uma classe pode implementar uma interface ou ser subclasse

de outra classe qualquer, mas não ambos simultaneamente.d) A construção de um método que pode levantar uma exceção,

cuja instância é uma subclasse de java.lang.RuntimeExcep-tion, não exige tratamento obrigatório por parte do programa-dor dentro daquele método.

e) Objetos da classe java.lang.String têm comportamento otimi-zado para permitir que seu valor seja alterado sempre que necessário, liberando imediatamente a memória usada pelo conteúdo anterior.

46

: : www.mundoj.com.br : :

Q13. (2009, CESGRANRIO – BNDES, Analista de Desenvolvi-mento) Analise as informações que se seguem, relacionadas aos conceitos de Orientação a Objetos (OO).I- O conceito de herança possibilita a especialização de compor-

tamentos preexistentes em classes ancestrais.II- Para que um método seja ativado num objeto, uma mensagem

não precisa necessariamente ter uma referência explícita a ele, se o objeto default da classe correspondente estiver adequada-mente configurado.

III- Uma das desvantagens da herança é a criação de dependência entre as classes envolvidas.

IV- De acordo com a ideia do encapsulamento, é desejável, do ponto de vista de um objeto, que seus atributos internos este-jam protegidos contra modificações diretas e que o acesso seja realizado por meio de métodos específicos (setters e getters).

V- Polimorfismo está relacionado à vinculação dinâmica de men-sagens e sobrescrita de métodos, sendo que o método corre-to a ser chamado só será definido em tempo de execução e dependerá do tipo da instância do objeto referenciado pela mensagem.

São corretas APENAS as afirmaçõesa) I e II.b) II e III.c) III e IV.d) III, IV e V.e) I, III, IV e V.

Q14. (2009, CESGRANRIO – BNDES, Analista de Desenvolvi-mento) No âmbito da Refatoração de software, analise as afirma-tivas a seguir.I - Introduce Parameter Object é uma técnica de refatoração que

pode ser aplicada em métodos muito longos.II - Código duplicado é candidato para aplicação das técnicas Ex-

tract Method e Substitute Algorithm.III - Extract Class é uma técnica de refatoração que pode ser aplicada em classes muito grandes.

Está(ão) correta(s) a(s) afirmativa(s)a) I, apenas.b) II, apenas.c) III, apenas.d) I e II, apenas.e) I, II e III.

CERTO OU ERRADO?

Q15. (2008, CESPE – Petrobras, Analista de Desenvolvimento) Diga se cada afirmativa abaixo esta certa ou errada.I) O padrão de projeto (design pattern) Proxy é usado quando se

quer usar uma classe existente, mas a interface da classe não é a de que se precisa. O Proxy pode ser implementado usando-se herança múltipla para converter uma interface em outra.

II) No padrão model view controller (MVC), o controlador trata eventos gerados pelos usuários e passa para o modelo os da-dos das requisições; um requisito para que o estilo de arqui-tetura MVC seja respeitado é o de que exista, em uma mesma aplicação, um único objeto no papel de controlador.

III) Os membros declarados private podem ser acessados a partir de código na classe com esses membros ou a partir de códigos em classes derivadas. Tais como os membros para os quais não

são declarados modificadores de acesso, os membros private podem ser acessados a partir de códigos em quaisquer classes no package no qual está a classe com o referido membro.

Simulado: respostas

R1. (b) abstratas. Classes abstratas não podem ser instanciadas diretamente. As suas propriedades e métodos devem ser herdados por uma classe concreta, que implementará toda ou parte das suas funcionalidades. Em Java, normalmente, uma classe abstrata possui pelo menos um método abstrato, apesar de isso não ser obrigatório. Além disso, em Java uma classe que possua apenas métodos abstratos é usualmente declarada como uma interface.

R2. (e). A restrição de acesso de um membro de uma classe não pode ser maior do que na superclasse.

R3. (a) Somente m1. Não é possível instanciar uma interface di-retamente, mas é possível instanciar uma classe que implementa essa interface. A classe C1() é instanciada e atribuída a um objeto do tipo I1, portanto mesmo C1() implementando também a in-terface I2, os métodos que não estão definidos em I1 não estarão acessíveis para o objeto obj. m3() e m2() não estão definidos na interface I1, logo não podem ser acessados por obj. Para isso, seria necessário um cast.

R4. (e). A função de coleta de lixo do Java (garbage collector) não pode ser forçada. Quando removemos todas as referências a um objeto, ele fica disponível para ser coletado. Chamar System.gc() tem o efeito de apenas sugerir à JVM para executar o garbage collector, mas, novamente, sem garantia.

R5. (c). Essa questão aborda conceitos de várias APIs do Java. A API de Reflexão pode ser usada para obter as anotações, modi-ficadores, interfaces, propriedades e classes do código Java, em tempo de execução. Portanto as duas primeiras alternativas são verdadeiras.

Sobre o synchronized, esse modificador faz com que o acesso a um método seja feito de forma sincronizada por múltiplas threads – o que acarreta impactos no desempenho caso esse método seja requisitado por várias threads, pois apenas uma poderá executá-lo por vez.

É uma boa prática de programação chamar explicitamente os métodos close() de classes como ResultSet e Statement, para que o objeto seja liberado no banco de dados imediatamente – dispo-nibilizando mais memória para a aplicação. É importante que a chamada aos métodos close() seja realizada em blocos finally para garantir sua execução tanto em caso de execução bem-sucedida quanto em casos de exceção.

A alternativa (c) é descabida, pois associar o modificador final a um método apenas indica que ele não pode ser sobrescrito por uma subclasse, e de fato isso pode melhorar o desempenho pelo compilador ao gerar os bytecodes correspondentes – mas essa pequena otimização não chegará nem perto dos 50% sugeridos. Como bons desenvolvedores, devemos focar em escrever código legível e que faça sentido em nosso projeto orientado a objetos (lembre da frase: “otimização prematura é a raiz de todo o mal”). Portanto, neste caso, devemos marcar um método como final apenas se, de fato, queremos que ele não seja sobrescrito por

47

subclasses (esse pode ser o caso numa implementação do padrão Template Method, por exemplo).

Vale a pena estudar bastante as principais funcionalidades da API de Reflexão do Java. É um assunto que tem aparecido nos concursos e que também é bastante usado em diversos frameworks do mercado.

É uma boa ideia utilizar a Java Persistence API (JPA) para ma-peamento objeto-relacional em nossas aplicações Java em vez de utilizar diretamente o Hibernate.

É importantíssimo que você, como bom desenvolvedor, co-nheça bem os principais padrões de projeto. Isso o ajudará a ler código escrito por outros, projetar novas soluções e se comunicar melhor com seus colegas. Aprenda, pelo menos, os padrões de projeto descritos no livro da gangue dos quatro (GoF) e os padrões arquiteturais de aplicações corporativas do Martin Fowler (ver referências).

Cuidado com a geração indiscriminada de getters() e setters() sem necessidade nas suas classes de domínio. Em bons sis-temas OO, com design orientado a domínio, é importante buscar dar mais responsabilidades a essas classes, e não mover tudo para classes de serviço deixando suas entidades como meras "portadoras de dados".

(Ver link na seção de referências "Como não aprender Java e Orientação a Objetos: getters e setters" e "Fantoches")

Muitas pessoas utilizam herança apenas com o intuito de reaproveitamento de código. Isso é ruim porque a herança "crava" o comportamento da superclasse nas subclasses e esse comportamento é de difícil substituição. Em outras palavras, há um elevado acoplamento entre as classes da hierarquia, di-ficultando a manutenibilidade, a flexibilidade e a testabilidade das classes envolvidas.

Portanto, quando a intenção for simplesmente reaproveita-mento código, analise se não seria melhor utilizar composição (relacionamento do tipo "tem um"). Não é à toa que a maioria dos padrões de projeto favorecem composição à herança. Só mais uma coisa: não se esqueça de utilizar injeção de depen-dência: seus testes agradecem! (Ver link na seção de referên-cias "Como não aprender orientação a objetos: Herança")

R6. (b). O container web gerencia o ciclo de vida de servlets e páginas JSPs, mas não EJBs, que exigem um container específico. EJBs executam no lado do servidor. Hibernate é um framework de persistência que perfaz o mapeamento objeto-relacional, e não o Struts (este é um framework para desenvolvimento web MVC). E a Java Persistent API não exige o uso do container EJB. Ela só exige um provedor que implemente suas interfaces (por exemplo: Hibernate, TopLink etc.) e, portanto, pode ser usada também num ambiente desktop.

R7. (e) persistência. O armazenamento e recuperação de dados é tarefa para a camada de persistência, que pode utilizar o Hiber-nate para o mapeamento objeto-relacional (entidades de domínio para tabelas relacionais).

R8. (d) A ideia do facade é prover uma interface simplificada para acessar um sub-sistema mais complexo. É bastante usado (e, muitas vezes, abusado) por desenvolvedores para criar uma camada de serviço ou aplicação em sistemas web.

Prototype é um padrão para criação de objetos; Decorator é um padrão para extensão dinâmica de funcionalidades de um objeto; Observer é um padrão para notificação e implementação de eventos entre objetos; e Flyweight é um padrão para compar-tilhamento de objetos e otimização de uso da memória.

R9. (b). Service Locator.

R10. (e) Java é uma tecnologia que agrega uma linguagem de programação, um ambiente de desenvolvimento e APIs próprias.

R11. (e) polimorfismo. A capacidade de redefinir um método em subclasses diferentes é chamada de polimorfismo, e é um dos con-ceitos mais importantes da orientação a objetos. Como a interface da classe pai (ContaBancária) é a mesma para as duas subclasses, o método AplicarJuros() pode ser referenciado sem conhecer o comportamento, detalhes de implementação ou redefinições nas classes filhas.

R12. (d). Java não possui o conceito de herança múltipla. Por outro lado, uma classe pode implementar mais de uma interface ao mesmo tempo, e também ser subclasse de outra classe simul-taneamente (combinando as cláusulas extends e implements). As exceções que são subclasses da RuntimeException não exigem tratamento pelo programador. Já os objetos da classe String são imutáveis: uma vez criado, o objeto não pode ter o seu valor alte-rado. A solução para alterar uma String é criar uma nova instância de um objeto, ou então utilizar a classe StringBuilder, que permite que o seu valor seja alterado.

R13. (e)

I - Esta é a ideia da herança: estender uma superclasse adicio-nando comportamento específico. A herança expressa um re-lacionamento do tipo "é um". Por exemplo, Quadrado "é uma" FormaGeometrica.

II - Em Java, não existe a configuração de um objeto "default". O que existe é a possibilidade de chamar um método sem especificar um objeto específico se já estivermos no contexto de um objeto (o que equivale a fazer this.umMetodoQualquer() ).

III - Corretíssimo. Uma grande desvantagem da herança é a geração de um acoplamento elevado entre as classes (ver dica a seguir).

IV) Encapsulamento é uma característica essencial em sistemas orientados a objetos.

V) Polimorfismo é uma característica básica da orientação a ob-jetos, possibilitando a criação de designs flexíveis por meio da substituição de objetos em tempo e execução.

R14. (e)

Refatoração é uma técnica disciplinada para alterar a estrutura in-terna de um código sem modificar o comportamento externo. Isso

48

: : www.mundoj.com.br : :

é feito com o objetivo de melhorar o design do código visando acomodar melhor futuras funcionalidades e tornar o código mais fácil de entender e manter.

Introduce Parameter Object é uma refatoração que utilizamos quando possuímos um conjunto de parâmetros num método que faz sentido compor um objeto. Neste caso, faz sentido utilizá-lo visando diminuir o número de argumentos de um método (de fato, afirmação da questão está meio ambígua).

Substitute Algorithm é uma refatoração que utilizamos quando queremos substituir um trecho de código de um algoritmo por outro trecho de código mais claro. Frequentemente, podemos remover duplicação de código neste processo.

Extract method é uma refatoração que utilizamos quando quere-mos mover um trecho de código comum (provavelmente utilizado em diversos lugares no sistema) para um método e então pos-sivelmente reaproveitá-lo nos diversos lugares. Esta refatoração também é muito usada para mover um pedaço de código para um método cujo nome “explique” o que o código faça. Esta refatora-ção, juntamente com as refatorações de renomeação, é uma das mais usadas pelos desenvolvedores experientes que se preocupam com a legibilidade e manutenibilidade de código.

Refatoração é um assunto que deve ser conhecido por todo desenvolvedor profissional. É um pilar das boas práticas de engenharia ágeis, com destaque especial para o Test-driven Development (TDD). A leitura do livro “Refactoring: Impro-ving the Design of Existing Code”, de Martin Fowler, é forte-mente recomendada.

R15.

I) ERRADO

Quando queremos usar uma classe existente, mas a interface da classe não é a de que se precisa usamos o padrão Adapter. O Proxy pode ser implementado usando-se composição e implementação de uma interface comum.

QUADRO: o leitor conhecedor de padrões pode reparar que a estrutura de classes dos padrões Adapter, Proxy e Decorator é pra-ticamente a mesma. O que difere um padrão do outro é a intenção que cada um tem.

II) ERRADO

Uma aplicação pode ter quantos models, views e controllers quantos sejam necessários.

Existem frameworks MVC que implementam o padrão Front-Controller, cuja ideia é ter apenas um controlador (em Java, normalmente implementado como um Servlet), responsável por encaminhar a requisição para o componente adequado.

III) ERRADO

Os membros declarados private podem ser acessados apenas a partir de código na classe com esses membros. Se não fosse assim, como teríamos encapsulamento?

Lembramos que, em Java, variáveis de instância declaradas como

protected são acessíveis não só em classes derivadas, mas também em classes contidas no mesmo pacote.

Para Saber Mais

• “Herança e Composição – os princípios por trás dos pa-drões”, ed. 39 da MundoJ – Eduardo Guerra

• “Refatoração: Melhoria Contínua do Código”, ed. 33 da MundoJ – Eduardo Guerra

• Série “Design patterns para um Mundo Real”, eds. 21, 22 e 23 da MundoJ – Rodrigo Yoshima

Considerações finais

Neste artigo, comentamos um pouco a respeito das vantagens e desvantagens de se trabalhar na iniciativa pública na área de TI. Boas condições de trabalho, estabilidade e salários elevados são ca-racterísticas que têm atraído um grande número de profissionais. Trouxemos ainda um simulado com algumas questões extraídas de concursos reais para que o leitor possa se familiarizar com os tipos de assuntos que costumam ser cobrados em muitos dos con-cursos públicos. Esperamos que o artigo possa ter sido proveitoso para diminuir a visão estereotipada que muitas pessoas possuem com relação à carreira pública na área de TI e que as questões comentadas possam ajudar aqueles que estão se preparando ou apenas pensando na possibilidade de fazer um concurso. Para os que desejam continuar os estudos das tecnologias apresentadas no artigo com o foco em concursos públicos, indicamos como bibliografia adicional o livro recém-lançado "Java e Web para Concursos" (ver quadro)•

“Voltei-me, e vi debaixo do sol que não é dos ligeiros a carreira, nem dos fortes a batalha, nem tampouco dos sábios o pão, nem tampouco dos prudentes as riquezas, nem tampouco dos entendidos o favor, mas que o tempo e a oportunidade ocorrem a todos.” (Ec 9:11)

• [Handbook de TI]: http://www.handbookdeti.com.br

• [Pesquisa da FGV] : http://www1.folha.uol.com.br/folha/dinheiro/ult91u474686.

shtml

• [Salarios em TI e o setor publico]: http://carreiradeti.com.br/nivel-superior-na-area-

de-ti-e-salario-de-mais-de-r9500/

• [Ambiente de trabalho] http://www.administradores.com.br/informe-se/informa-

tivo/bom-ambiente-de-trabalho-e-cada-vez-mais-valorizado-como-identifica-

lo/15062/

• [Pesquisa do IPEA] http://desafios2.archipelago/003/00301009.jsp?ttCD_

CHAVE=13047

• [Como não aprender orientação a objetos: herança] http://blog.caelum.com.

br/2006/10/14/como-nao-aprender-orientacao-a-objetos-heranca/

• [Como não aprender orientação a objetos: getters e setters] http://blog.caelum.

com.br/2006/09/14/nao-aprender-oo-getters-e-setters/

• http://www.fragmental.com.br/wiki/index.php/Fantoches

• [Resumo dos padrões de projeto GoF] http://www.dofactory.com/Patterns/Patterns.

aspx

• Design Patterns: Elements of Reusable Object-Oriented Software

• Patterns of Enterprise Application Architecture

• Refactoring: Improving the Design of Existing Code

Referências

Livro: Java e Web para Concursos

A proposta do livro é apresentar de maneira objetiva o conteúdo específico para a realização dos exames – focados em tecnologias relacionadas à Web, Orientação a Objetos, plataforma Java e JEE (JSP, Servlets, JSF, JPA), frameworks Web, Padrões de Projeto e Web Servi-ces. Além disso, são oferecidas mais de 300 questões de concursos públicos relativas ao conteúdo apresentado, que foram organizadas entre os exercícios dos capítulos e os simulados no final. Prepare-se para as provas do Bacen, Bndes, Petrobras, IBGE, Serpro, MPU,

Eletrobras e muitas outras.

Mais informações e seções do livro disponíveis para download encontram-se no site do autor: www.rbper.com

Depoimentos

Depoimento I

Depoimento II

José Roberto: tem 22 anos de experiência na área de informá-tica. Formado em Tecnologia de Processamento de Dados pela PUC-RJ e em Administração de Empresas pela UERJ, possui pós-graduação lato-sensu em Gestão Estratégica de Informação pela UFRJ e em Gestão Estratégica de Negócios pela Fundação Dom Cabral. É mestre em Informática pela UFRJ e já ministrou disciplinas relacionadas a gerenciamento de projetos em cursos de pós-graduação (MBA) na UFRJ e na Universidade Estácio de Sá. Trabalhou na Dataprev e Vale como analista de sistemas e coorde-nador de projetos. No Banco Central, vem atuando na Adminis-tração do Selic coordenando equipes de infraestrutura (banco de dados, segurança e servidores de aplicação). Atualmente participa da formação da equipe de segurança de TI para o Selic.

Ingressei no Banco Central em 1997 por meio de um concurso específico pra área de informática. Na ocasião, não havia sequer a diferença en-tre TI e desenvolvimento. Ou seja, a matéria era simplesmente... tudo !! Confesso que foi exatamente aí uma das razões para o meu sucesso, por conta do meu perfil generalista. Credito a minha aprovação também ao fato de ter concluído em 1997 um MBA em Gestão Estratégica de TI, que me proporcionou um conhecimento bastante amplo acerca de várias disciplinas (inclusive administrativas – Matemática Financeira, Contabilidade, Economia, Administração) cobradas no concurso.

Eu fui testemunha de um grande salto de qualidade na instituição. Em janeiro de 1998, quando tomei posse no BC depois de ter me desligado da Vale (na época ainda conhecida por Companhia Vale do Rio Doce) tive a sensação de entrar numa organização no mínimo 10 anos atra-sada em relação aos processos com os quais convivia. O nível tecnoló-gico era muito baixo e havia uma defasagem muito grande em relação

ao que se fazia na iniciativa privada. Durante a década que se iniciou no ano 2000 e, mais efetivamente, com o projeto SPB (Sistema de Pa-gamento Brasileiro), o Banco Central passou a tirar essa diferença de forma galopante. Atualmente, trabalhamos no Bacen com tecnologia de ponta, processos de trabalho modernos e uma qualificação muito alta dos servidores. Mesmo se tratando de uma instituição heterogênea (algumas áreas ainda trabalham com processos mais antigos), de um modo geral, a instituição trabalhou bem a manutenção do seu grau de excelência.

Eu classifico essa mudança como essencial no serviço público para podermos encarar os desafios que estão pela frente. A sociedade bra-sileira vem amadurecendo seus conceitos de cidadania e de cobrança por serviços de qualidade das instituições públicas. Para encarar esse desafio a qualificação do servidor precisa estar associada à motivação para o trabalho e, principalmente, ao sentido do verbo “servir”, muitas vezes esquecido pela classe política.

Vinci Amorim ([email protected]): é Analista Executi-vo do Inmetro, arquiteto de Soluções. Bacharel em Ciência da Computação pela UFV e mestre em Informática pela PUC-Rio. Possui certificações Java e experiência de 9 anos em projetos para Petrobras, Vale e Oi, em atividades de requisitos, arquitetura, de-senvolvimento e gerência de projetos.

Trabalhar no Inmetro está sendo para mim uma experiência ímpar.

Por um lado, enormes desafios típicos de órgãos públicos, em espe-cial devido a tempo de realização de licitações e concursos, e todas as consequências imagináveis causadas por décadas de má gestão pública devido a administradores sem competência técnica e administrativa.

Por outro lado, uma enorme vontade, especialmente dos novos servido-res de implantar as boas práticas já consagradas na iniciativa privada, como BSC, Gestão por Processos, Gestão por Competências, Avaliação de Desempenho etc. Ainda falta um grande caminho a percorrer rumo ao desenvolvimento. Mas pelo menos já estamos na direção certa.

Na área de TI o TCU está realizando um ótimo trabalho no sentido de orientar os órgãos quanto à adoção de modelos de Governança de TI como Cobit, ITIL, CMMI, PMBoK. E também no sentido de que os servidores públicos atuem em atividades de gestão, estratégias, di-retrizes e fiscalização. E sugere que as atividades operacionais sejam terceirizadas.

Como arquiteto de Soluções tenho a oportunidade de colaborar na definição de metodologias, boas práticas, processos de TI, avaliação de tecnologias e ferramentas corporativas. Além de atuar com coaching, testes e soluções de integração. Ou seja, minha experiência no Inmetro é de trabalho árduo e bastante desafiante. Estou aprendendo muito.

Para passar num concurso o principal é resolver muitas questões, espe-cialmente as comentadas. E para os assuntos pouco vistos em faculdade como Governança de TI e Segurança da Informação recomendo reali-zar cursos como os da TI. Exames.

49