Ir para conteúdo
Faça parte da equipe! (2024) ×

opandaG

Silver Member
  • Total de Posts

    386
  • Registro em

  • Última visita

  • Dias Ganhos

    5
  • WCoins

    0

Posts postados por opandaG

  1. Olá, venho aqui oferecer meus serviços, entrega no prazo correto e dentro do orçamento combinado.

    Desenvolvimento de Aplicações Desktop, web e mobile

    Faço desenvolvimento de aplicações nas seguintes linguagens C#, .net, Python, Java, Javascript, C, PHP.

    Cursos de Desenvolvimento, Pentest e Infraestrutura de Servidores

    Ofereço Cursos onde o aluno paga pela hora aula, e as aulas são baseadas em muitos lab's ( Atividades Práticas ), seguindo o modelo Google de Ensino, o mesmo adotado por ela na capacitação de seus profissionais.

     

    Backup em cloud

    Backup é uma medida de segurança que cria uma cópia dos dados em um outro dispositivo, como um HD externo. Dessa forma, as informações salvas podem ser recuperadas caso o computador principal falhe.

     

    O Backup em cloud é a solução ideal de backup remoto, seguro, sem custos de investimentos em infraestrutura e pago como um serviço.

     

    Este é verdadeiramente o conceito de Backup como Serviço (BaaS – Backup as a Service), que atualmente é o padrão mundial para contratação de serviços de TI com valor agregado, oferecendo serviços de excelência a custos competitivos.

     

    Consultoria em segurança e ataques

    Se a sua empresa ou você precisa de um especialistas em segurança da informação para blindar o sistema contra ataques de hackers, pode contar com a minha ajuda. Vale lembrar que o valor estratégico dos departamentos de TI é grandioso. É neles que acontecem a produção e disseminação da cultura de prevenção em todos os setores.

    Eu faço todo diagnóstico de rede para orientar a escolha das melhores medidas e controles necessários no ambiente corporativo e operacional. Determinamos a vulnerabilidade e a melhor forma de prevenção para que não exista interrupção de serviços essenciais e outras ameaças no negócio ou na sua casa.

     

    Consultoria para compra de equipamentos

    Levantamento das peças necessárias:

     

    Muitas vezes seu computador não está funcionado por alguma peça danificada, ou você quer adquirir novos computadores e fica mais barato comprar as peças e montar, além de poder comprar peças com qualidade superior e melhorar o desempenho e a durabilidade do seu equipamento.

    Cotação de preços:

    Realizamos a cotação dos preços das peças, levando em conta a qualidade, o local de compra, e o menor preço para aquisição..

    Implantação de boas práticas de governança de TI / Cobit / ISO 27001 / ITIL

    COBIT – Control Objectives for Information and Related Technology

     

    Modelo abrangente aplicável para a auditoria e controle de processos de T.I., desde o planejamento da tecnologia até a monitoração e auditoria de todos os processos.

    ISO 27001 – International Organization for Standardization

    A norma ISO 27001 é o padrão e a referência Internacional para a gestão da Segurança da informação e tem como princípio geral a organização de um conjunto de requisitos, processos e controles com o objetivo de mitigarem e gerirem adequadamente o risco da organização oferecendoaos seus clientes e parceiros um nível extra de conforto no que concerne à Segurança da Informação.

    ITIL – Information Technology Infrastructure Library

    O ITIL é um modelo aberto, flexível e não-proprietário. Pode ser implementado por qualquer organização, independentemente do porte ou segmento; e é referência mundial em gerenciamento de recursos de TI. Se aplicado de forma planejada, é capaz de diminuir – até eliminar – os anseios de clientes e usuários no que se refere à eficiência, eficácia e economia dos produtos e serviços de uma organização.

     

    Virtualização de servidores

     

    A virtualização é a criação da versão virtual de um sistema operacional, um servidor, um sistema de armazenamento, etc. Quando falamos em virtualização de servidores estamos falando em dividir os recursos de um hardware (servidor físico) em diversos servidores virtuais que podem ser usados com finalidade diferentes.

     

    Dessa forma, é possível executar muitos sistemas operacionais a partir de um mesmo hardware, sem que haja interferência entre esses sistemas.

     

    A virtualização de servidores traz diversas vantagens para a empresa, entre as quais podemos destacar:

    • Redução de downtime (tempo de inatividade do sistema): a virtualização evita perdas de dados, paradas não planejadas, paradas no ambiente de produção e assim por diante;
    • Automação mais apurada dos processos;
    • Taxa de utilização do servidor pode subir para 65% a 90%;
    • Maior retorno sobre o investimento;
    • Redução de custo operacional (até 40%), inclusive de energia elétrica;
    • Otimização do espaço físico;
    • Melhor utilização dos recursos disponíveis;
    • Gerenciamento centralizado;
    • Facilidade de recuperação em caso de desastres;
    • Independência do servidor físico;
    • Aplicações em plena compatibilidade;
    • Adaptação a diferentes cargas de trabalho;
    • Migração de ambientes fácil e transparente;
    • Possibilidade de simulações.

    Suporte, Diagnóstico e Reparação de Servidores

    Tenho o necessário para diagnosticar e reparar qualquer problema do seu servidor, tanto remotamente como on-site.
    • Curtir 4
  2. Olá Galera, aqui é o panda!

    Vamos para Aula de Numero 05, Começando com Orientação a objetos!

    Comentem e deixe o feedback de vocês!

     

     

    Orientação a objetos é uma maneira de programar que ajuda na organização e resolve muitos problemas enfrentados pela programação procedural.

     

    Consideremos o clássico problema da validação de um CPF. Normalmente, temos um formulário, no qual recebemos essa informação, e depois temos que enviar esses caracteres para uma função que vai validá-lo, como no pseudocódigo abaixo:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Alguém te obriga a sempre validar esse CPF? Você pode, inúmeras vezes, esquecer de chamar esse validador. E mais: considere que você tem 50 formulários e precise validar em todos eles o CPF. Se sua equipe tem 3 programadores trabalhando nesses formulários, quem fica responsável por essa validação? Todos!

     

    A situação pode piorar: na entrada de um novo desenvolvedor, precisaríamos avisá-lo que sempre devemos validar o cpf de um formulário. É nesse momento que nascem aqueles guias de programação para o desenvolvedor que for entrar nesse projeto - às vezes, é um documento enorme. Em outras palavras, todo desenvolvedor precisa ficar sabendo de uma quantidade enorme de informações, que, na maioria das vezes, não está realmente relacionado à sua parte no sistema, mas ele precisa ler tudo isso, resultando um entrave muito grande!

     

    Outra situação onde ficam claros os problemas da programação procedural, é quando nos encontramos na necessidade de ler o código que foi escrito por outro desenvolvedor e descobrir como ele funciona internamente. Um sistema bem encapsulado não deveria gerar essa necessidade. Em um sistema grande, simplesmente não temos tempo de ler todo o código existente.

     

    Considerando que você não erre nesse ponto e que sua equipe tenha uma comunicação muito boa (perceba que comunicação excessiva pode ser prejudicial e atrapalhar o andamento), ainda temos outro problema: imagine que, em todo formulário, você também quer que a idade do cliente seja validada - o cliente precisa ter mais de 18 anos. Vamos ter de colocar um if... mas onde? Espalhado por todo seu código... Mesmo que se crie outra função para validar, precisaremos incluir isso nos nossos 50 formulários já existentes. Qual é a chance de esquecermos em um deles? É muito grande.

     

    A responsabilidade de verificar se o cliente tem ou não tem 18 anos ficou espalhada por todo o seu código. Seria interessante poder concentrar essa responsabilidade em um lugar só, para não ter chances de esquecer isso.

     

    Melhor ainda seria se conseguíssemos mudar essa validação e os outros programadores nem precisassem ficar sabendo disso. Em outras palavras, eles criariam formulários e um único programador seria responsável pela validação: os outros nem sabem da existência desse trecho de código. Impossível? Não, o paradigma da orientação a objetos facilita tudo isso.

     

    O problema do paradigma procedural é que não existe uma forma simples de criar conexão forte entre dados e funcionalidades. No paradigma orientado a objetos é muito fácil ter essa conexão através dos recursos da própria linguagem.

     

    Quais as vantagens?

     

    Orientação a objetos vai te ajudar muito a se organizar e escrever menos, além de concentrar as responsabilidades nos pontos certos, flexibilizando sua aplicação, encapsulando a lógica de negócios.

     

    Outra enorme vantagem, onde você realmente vai economizar montanhas de código, é o polimorfismo das referências, que veremos em um posterior capítulo.

     

    Nos próximos capítulos, conseguiremos enxergar toda essa vantagem, mas, primeiramente é necessário conhecer um pouco mais da sintaxe e da criação de tipos e referências em Java.

     

    Criando um tipo

     

    Considere um programa para um banco, é bem fácil perceber que uma entidade extremamente importante para o nosso sistema é a conta. Nossa ideia aqui é generalizarmos alguma informação, juntamente com funcionalidades que toda conta deve ter.

     

    O que toda conta tem e é importante para nós?

     

    • número da conta
       
       
    • nome do dono da conta
       
       
    • saldo
       
       
    • limite
       

    O que toda conta faz e é importante para nós? Isto é, o que gostaríamos de "pedir à conta"?

     

    • saca uma quantidade x
       
       
    • deposita uma quantidade x
       
       
    • imprime o nome do dono da conta
       
       
    • devolve o saldo atual
       
       
    • transfere uma quantidade x para uma outra conta y
       
       
    • devolve o tipo de conta
       

    Com isso, temos o projeto de uma conta bancária. Podemos pegar esse projeto e acessar seu saldo? Não. O que temos ainda é o projeto. Antes, precisamos construir uma conta, para poder acessar o que ela tem, e pedir a ela que faça algo.

     

    especificacaoDeConta_revis%C3%A3o.png

     

    Repare na figura: apesar do papel do lado esquerdo especificar uma Conta, essa especificação é uma Conta? Nós depositamos e sacamos dinheiro desse papel? Não. Utilizamos a especificação da Conta para poder criar instâncias que realmente são contas, onde podemos realizar as operações que criamos.

     

    Apesar de declararmos que toda conta tem um saldo, um número e uma agência no pedaço de papel (como à esquerda na figura), são nas instâncias desse projeto que realmente há espaço para armazenar esses valores.

     

    Ao projeto da conta, isto é, a definição da conta, damos o nome de classe. Ao que podemos construir a partir desse projeto, as contas de verdade, damos o nome de objetos.

     

    A palavra classe vem da taxonomia da biologia. Todos os seres vivos de uma mesma classe biológica têm uma série de atributos e comportamentos em comum, mas não são iguais, podem variar nos valores desses atributos e como realizam esses comportamentos.

     

    Homo Sapiens define um grupo de seres que possuem características em comum, porém a definição (a ideia, o conceito) de um Homo Sapiens é um ser humano? Não. Tudo está especificado na classe Homo Sapiens, mas se quisermos mandar alguém correr, comer, pular, precisaremos de uma instância de Homo Sapiens, ou então de um objeto do tipo Homo Sapiens.

     

    Um outro exemplo: uma receita de bolo. A pergunta é certeira: você come uma receita de bolo? Não. Precisamos instanciá-la, criar um objeto bolo a partir dessa especificação (a classe) para utilizá-la. Podemos criar centenas de bolos a partir dessa classe (a receita, no caso), eles podem ser bem semelhantes, alguns até idênticos, mas são objetosdiferentes.

     

    Podemos fazer milhares de analogias semelhantes. A planta de uma casa é uma casa? Definitivamente não. Não podemos morar dentro da planta de uma casa, nem podemos abrir sua porta ou pintar suas paredes. Precisamos, antes, construir instâncias a partir dessa planta. Essas instâncias, sim, podemos pintar, decorar ou morar dentro.

     

    Pode parecer óbvio, mas a dificuldade inicial do paradigma da orientação a objetos é justo saber distinguir o que é classe e o que é objeto. É comum o iniciante utilizar, obviamente de forma errada, essas duas palavras como sinônimos.

     

    Uma classe em Java

     

    Vamos começar apenas com o que uma Conta tem, e não com o que ela faz (veremos logo em seguida).

     

    Um tipo desses, como o especificado de Conta acima, pode ser facilmente traduzido para Java:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    String

    String é uma classe em Java. Ela guarda uma cadeia de caracteres, uma frase completa. Como estamos ainda aprendendo o que é uma classe, entenderemos com detalhes a classe String apenas em capítulos posteriores.

    Por enquanto, declaramos o que toda conta deve ter. Estes são os atributos que toda conta, quando criada, vai ter. Repare que essas variáveis foram declaradas fora de um bloco, diferente do que fazíamos quando tinha aquele main. Quando uma variável é declarada diretamente dentro do escopo da classe, é chamada de variável de objeto, ou atributo.

     

    Criando e usando um objeto

    Já temos uma classe em Java que especifica o que todo objeto dessa classe deve ter. Mas como usá-la? Além dessa classe, ainda teremos o Programa.java e a partir dele é que vamos utilizar a classeConta.

     

    Para criar (construir, instanciar) uma Conta, basta usar a palavra chave new. Devemos utilizar também os parênteses, que descobriremos o que fazem exatamente em um capítulo posterior:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Bem, o código acima cria um objeto do tipo Conta, mas como acessar esse objeto que foi criado? Precisamos ter alguma forma de nos referenciarmos a esse objeto. Precisamos de uma variável:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Pode parecer estranho escrevermos duas vezes Conta: uma vez na declaração da variável e outra vez no uso do new. Mas há um motivo, que em breve entenderemos.

     

    Através da variável minhaConta, podemos acessar o objeto recém criado para alterar seu dono, seu saldo, etc:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É importante fixar que o ponto foi utilizado para acessar algo em minhaConta. A minhaConta pertence ao Duke, e tem saldo de mil reais.

     

    Métodos

    Dentro da classe, também declararemos o que cada conta faz e como isto é feito - os comportamentos que cada classe tem, isto é, o que ela faz. Por exemplo, de que maneira que uma Conta saca dinheiro? Especificaremos isso dentro da própria classe Conta, e não em um local desatrelado das informações da própria Conta. É por isso que essas "funções" são chamadas de métodos. Pois é a maneira de fazer uma operação com um objeto.

     

    Queremos criar um método que saca uma determinada quantidade e não devolve nenhuma informação para quem acionar esse método.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    A palavra chave void diz que, quando você pedir para a conta sacar uma quantia, nenhuma informação será enviada de volta a quem pediu.

     

    Quando alguém pedir para sacar, ele também vai dizer quanto quer sacar. Por isso precisamos declarar o método com algo dentro dos parênteses - o que vai aí dentro é chamado de argumento do método (ou parâmetro). Essa variável é uma variável comum, chamada também de temporária ou local, pois, ao final da execução desse método, ela deixa de existir.

     

    Dentro do método, estamos declarando uma nova variável. Essa variável, assim como o argumento, vai morrer no fim do método, pois este é seu escopo. No momento que vamos acessar nosso atributo, usamos a palavra chave this para mostrar que esse é um atributo, e não uma simples variável. (veremos depois que é opcional)

     

    Repare que, nesse caso, a conta pode estourar o limite fixado pelo banco. Mais para frente, evitaremos essa situação, e de uma maneira muito elegante.

     

    Da mesma forma, temos o método para depositar alguma quantia:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Observe que não usamos uma variável auxiliar e, além disso, usamos a abreviação +=para deixar o método bem simples. O += soma quantidade ao valor antigo do saldo e guarda no próprio saldo, o valor resultante.

     

    Para mandar uma mensagem ao objeto e pedir que ele execute um método, também usamos o ponto. O termo usado para isso é invocação de método.

     

    O código a seguir saca dinheiro e depois deposita outra quantia na nossa conta:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Uma vez que seu saldo inicial é 1000 reais, se sacarmos 200 reais, depositarmos 500 reais e imprimirmos o valor do saldo, o que será impresso?

     

    Métodos com retorno

    Um método sempre tem que definir o que retorna, nem que defina que não há retorno, como nos exemplos anteriores onde estávamos usando o void.

     

    Um método pode retornar um valor para o código que o chamou. No caso do nosso método saca , podemos devolver um valor booleano indicando se a operação foi bem sucedida.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    A declaração do método mudou! O método saca não tem void na frente. Isto quer dizer que, quando é acessado, ele devolve algum tipo de informação. No caso, um boolean. A palavra chave return indica que o método vai terminar ali, retornando tal informação.

     

    Exemplo de uso:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Ou então, posso eliminar a variável temporária, se desejado:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Mais adiante, veremos que algumas vezes é mais interessante lançar uma exceção (exception) nesses casos.

     

    Meu programa pode manter na memória não apenas uma conta, como mais de uma:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    bjetos são acessados por referências

     

    Quando declaramos uma variável para associar a um objeto, na verdade, essa variável não guarda o objeto, e sim uma maneira de acessá-lo, chamada de referência.

     

    É por esse motivo que, diferente dos tipos primitivos como int e long, precisamos dar new depois de declarada a variável:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O correto aqui, é dizer que c1 se refere a um objeto. Não é correto dizer que c1 é um objeto, pois c1 é uma variável referência, apesar de, depois de um tempo, os programadores Java falarem "Tenho um objeto c do tipo Conta", mas apenas para encurtar a frase "Tenho uma referência c a um objeto do tipo Conta".

     

    Basta lembrar que, em Java, uma variável nunca é um objeto. Não há, no Java, uma maneira de criarmos o que é conhecido como "objeto pilha" ou "objeto local", pois todo objeto em Java, sem exceção, é acessado por uma variável referência.

     

    Esse código nos deixa na seguinte situação:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Internamente, c1 e c2 vão guardar um número que identifica em que posição da memória aquela Conta se encontra. Dessa maneira, ao utilizarmos o "." para navegar, o Java vai acessar a Conta que se encontra naquela posição de memória, e não uma outra.

     

    Para quem conhece, é parecido com um ponteiro, porém você não pode manipulá-lo como um número e nem utilizá-lo para aritmética, ela é tipada.

     

    Um outro exemplo:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Qual é o resultado do código acima? O que aparece ao rodar?

     

    O que acontece aqui? O operador = copia o valor de uma variável. Mas qual é o valor da variável c1? É o objeto? Não. Na verdade, o valor guardado é a referência (endereço) de onde o objeto se encontra na memória principal.

     

    Na memória, o que acontece nesse caso:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Quando fizemos c2 = c1, c2 passa a fazer referência para o mesmo objeto que c1referencia nesse instante.

     

    Então, nesse código em específico, quando utilizamos c1 ou c2 estamos nos referindo exatamente ao mesmo objeto! Elas são duas referências distintas, porém apontam para o mesmo objeto! Compará-las com "==" vai nos retornar true, pois o valor que elas carregam é o mesmo!

     

    Outra forma de perceber, é que demos apenas um new, então só pode haver um objeto Conta na memória.

     

    Atenção: não estamos discutindo aqui a utilidade de fazer uma referência apontar pro mesmo objeto que outra. Essa utilidade ficará mais clara quando passarmos variáveis do tipo referência como argumento para métodos.

     

    new

     

    O que exatamente faz o new?

     

    O new executa uma série de tarefas, que veremos mais adiante.

     

    Mas, para melhor entender as referências no Java, saiba que o new, depois de alocar a memória para esse objeto, devolve uma "flecha", isto é, um valor de referência. Quando você atribui isso a uma variável, essa variável passa a se referir para esse mesmo objeto.

     

    Continuando...

     

    Podemos então ver outra situação:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O operador == compara o conteúdo das variáveis, mas essas variáveis não guardam o objeto, e sim o endereço em que ele se encontra. Como em cada uma dessas variáveis guardamos duas contas criadas diferentemente, elas estão em espaços diferentes da memória, o que faz o teste no if valer false. As contas podem ser equivalentes no nosso critério de igualdade, porém elas não são o mesmo objeto. Quando se trata de objetos, pode ficar mais fácil pensar que o == compara se os objetos (referências, na verdade) são o mesmo, e não se são iguais.

     

    referencia.png

     

    Para saber se dois objetos têm o mesmo conteúdo, você precisa comparar atributo por atributo. Veremos uma solução mais elegante para isso também.

     

    O método transfere()

     

    E se quisermos ter um método que transfere dinheiro entre duas contas? Podemos ficar tentados a criar um método que recebe dois parâmetros: conta1 e conta2 do tipo Conta. Mas cuidado: assim estamos pensando de maneira procedural.

     

    A ideia é que, quando chamarmos o método transfere, já teremos um objeto do tipo Conta (o this), portanto o método recebe apenas um parâmetro do tipo Conta, a Conta destino (além do valor):

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Para deixar o código mais robusto, poderíamos verificar se a conta possui a quantidade a ser transferida disponível. Para ficar ainda mais interessante, você pode chamar os métodos deposita e saca já existentes para fazer essa tarefa:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Quando passamos uma Conta como argumento, o que será que acontece na memória? Será que o objeto é clonado?

     

    No Java, a passagem de parâmetro funciona como uma simples atribuição como no uso do "=". Então, esse parâmetro vai copiar o valor da variável do tipo Conta que for passado como argumento. E qual é o valor de uma variável dessas? Seu valor é um endereço, uma referência, nunca um objeto. Por isso não há cópia de objetos aqui.

     

    Esse último código poderia ser escrito com uma sintaxe muito mais sucinta. Como?

     

    Transfere Para Perceba que o nome deste método poderia ser transferePara ao invés de só transfere. A chamada do método fica muito mais natural, é possível ler a frase em português que ela tem um sentido:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    A leitura deste código seria "Conta1 transfere para conta2 50 reais".

     

    Continuando com atributos

     

    As variáveis do tipo atributo, diferentemente das variáveis temporárias (declaradas dentro de um método), recebem um valor padrão. No caso numérico, valem 0, no caso de boolean, valem false.

     

    Você também pode dar valores default, como segue:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Nesse caso, quando você criar uma conta, seus atributos já estão "populados" com esses valores colocados.

     

    Imagine que comecemos a aumentar nossa classe Conta e adicionar nome, sobrenome e cpf do cliente dono da conta. Começaríamos a ter muitos atributos... e, se você pensar direito, uma Conta não tem nome, nem sobrenome nem cpf, quem tem esses atributos é um Cliente. Então podemos criar uma nova classe e fazer uma composição

     

    Seus atributos também podem ser referências para outras classes. Suponha a seguinte classe Cliente:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    E dentro do main da classe de teste:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Aqui, simplesmente houve uma atribuição. O valor da variável c é copiado para o atributo titular do objeto ao qual minhaConta se refere. Em outras palavras, minhaContatem uma referência ao mesmo Cliente que c se refere, e pode ser acessado através deminhaConta.titular.

     

    Você pode realmente navegar sobre toda essa estrutura de informação, sempre usando o ponto:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Ou ainda, pode fazer isso de uma forma mais direta e até mais elegante:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Um sistema orientado a objetos é um grande conjunto de classes que vai se comunicar, delegando responsabilidades para quem for mais apto a realizar determinada tarefa. A classe Banco usa a classe Conta que usa a classe Cliente, que usa a classe Endereco. Dizemos que esses objetos colaboram, trocando mensagens entre si. Por isso acabamos tendo muitas classes em nosso sistema, e elas costumam ter um tamanho relativamente curto.

     

    Mas, e se dentro do meu código eu não desse new em Cliente e tentasse acessá-lo diretamente?

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Quando damos new em um objeto, ele o inicializa com seus valores default, 0 para números, false para boolean e null para referências. null é uma palavra chave em java, que indica uma referência para nenhum objeto.

     

    Se, em algum caso, você tentar acessar um atributo ou método de alguém que está se referenciando para null, você receberá um erro durante a execução (NullPointerException, que veremos mais à frente). Da para perceber, então, que o newnão traz um efeito cascata, a menos que você dê um valor default (ou use construtores, que também veremos mais a frente):

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Com esse código, toda nova Conta criada já terá um novo Cliente associado, sem necessidade de instanciá-lo logo em seguida da instanciação de uma Conta. Qual alternativa você deve usar? Depende do caso: para toda nova Conta você precisa de um novo Cliente? É essa pergunta que deve ser respondida. Nesse nosso caso a resposta é não, mas depende do nosso problema.

     

    Atenção: para quem não está acostumado com referências, pode ser bastante confuso pensar sempre em como os objetos estão na memória para poder tirar as conclusões de o que ocorrerá ao executar determinado código, por mais simples que ele seja. Com tempo, você adquire a habilidade de rapidamente saber o efeito de atrelar as referências, sem ter de gastar muito tempo para isso. É importante, nesse começo, você estar sempre pensando no estado da memória. E realmente lembrar que, no Java "uma variável nunca carrega um objeto, e sim uma referência para ele" facilita muito.

     

    Para saber mais: Uma Fábrica de Carros

     

    Além do Banco que estamos criando, vamos ver como ficariam certas classes relacionadas a uma fábrica de carros. Vamos criar uma classe Carro, com certos atributos, que descrevem suas características, e com certos métodos, que descrevem seu comportamento.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Vamos testar nosso Carro em um novo programa:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Nosso carro pode conter também um Motor:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Podemos, criar diversos Carros e mexer com seus atributos e métodos, assim como fizemos no exemplo do Banco.

     

    Um pouco mais...

     

    • Quando declaramos uma classe, um método ou um atributo, podemos dar o nome que quisermos, seguindo uma regra. Por exemplo, o nome de um método não pode começar com um número. Pesquise sobre essas regras.
       
       
    • Como você pode ter reparado, sempre damos nomes às variáveis com letras minúsculas. É que existem convenções de código, dadas pela Oracle, para facilitar a legibilidade do código entre programadores. Essa convenção é muito seguida. Leia sobre ela pesquisando por "java code conventions".
       
       
    • É necessário usar a palavra chave this quando for acessar um atributo? Para que, então, utilizá-la?
       
       
    • O exercício a seguir pedirá para modelar um "funcionário". Existe um padrão para representar suas classes em diagramas, que é amplamente utilizado, chamado UML. Pesquise sobre ele.
       

    • Curtir 4
  3. bs0lut' date=' post: 9638461, member: 4675327"']Sabia não , pensei que tu tinha desistido do fórum '-' , vc saiu sem avisar nada.

     

    Uai cara aconteceu um monte de problema na minha familia e na minha vida, serio se quiser saber so chamar pv pra não ficarmos fazendo flood no post

    • Curtir 1
  4. E ai Galera!

    Estou voltando a ativa, quem não sabe quem sou me chamo Pedro sou Desenvolvedor Python e Cientista de Dados (Data Science), Sou aluno de Extensão e Pesquisa de Inteligência Artificial e GDE.

    Estive afastado por vários problemas de Saude e Familia que me pegaram de surpresa e acabei tendo que "sumir" por um tempo, mas agora tudo se resolveu e estou de volta aqui pra somar e ajudar a todos!

    Ai embaixo vai umas fotos desse gordo delicia!

    Confiram na infozone estou publicando um curso completo de Java em breve trarei vídeos!

     

    Inscrevam-se no meu canal do youtube estarei trazendo conteudo sobre Inteligencia Artificial e Programação em breve! TECNOPATAS

     

    O gordo:

     

    4KgkTrg5SMujUwqMHNYIiLYJyteHKzWU4zSzJQcGE-9wCWBDO5qe8KPSTNzEogDIXgkreiVMGYF96EmrEedp=w1366-h662-rw

     

    Dando Palestra sobre Machine Learning:

    oiEeivBSdSfW_GxHbzzRiF6x6jF8VRhATnFo9FKLvCYddr4NATOSuExWsSPxVoGbp6z2mffAWCHaj1FQ5ppc=w1366-h662-rw

    Sensualizando:

    1vvT2DqvJgd_YT9GdVJbDfGSjkd0pRGQ6Ytig2OPNg_wFg3iUo5n1q8RPtUF5zGE_gOM29EL-5S_DOc=w1366-h662-rw

    • Curtir 2
  5. Olá Galera, aqui é o panda!

    Vamos para Aula de Numero 04, Variáveis e fluxo!

    Comentem e deixe o feedback de vocês!

     

    Dentro de um bloco, podemos declarar variáveis e usá-las. Em Java, toda variável tem um tipo que não pode ser mudado, uma vez que declarado:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Por exemplo, é possível ter uma idade que guarda um número inteiro:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Com isso, você declara a variável idade, que passa a existir a partir daquela linha. Ela é do tipo int, que guarda um número inteiro. A partir daí, você pode usá-la, primeiramente atribuindo valores.

     

    A linha a seguir é a tradução de: "idade deve valer quinze".

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Comentários em Java

     

    Para fazer um comentário em java, você pode usar o // para comentar até o final da linha, ou então usar o /* */ para comentar o que estiver entre eles.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Além de atribuir, você pode utilizar esse valor. O código a seguir declara novamente a variável idade com valor 15 e imprime seu valor na saída padrão através da chamada a System.out.println.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Por fim, podemos utilizar o valor de uma variável para algum outro propósito, como alterar ou definir uma segunda variável. O código a seguir cria uma variável chamada idadeNoAnoQueVem com valor de idade mais um.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    No mesmo momento que você declara uma variável, também é possível inicializá-la por praticidade:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Você pode usar os operadores +, -, / e * para operar com números, sendo eles responsáveis pela adição, subtração, divisão e multiplicação, respectivamente. Além desses operadores básicos, há o operador % (módulo) que nada mais é que o resto de uma divisão inteira.

     

    Veja alguns exemplos:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Como rodar esses códigos?

     

    Você deve colocar esses trechos de código dentro do bloco main que vimos no capítulo anterior. Isto é, isso deve ficar no miolo do programa. Use bastante System.out.println, dessa forma você pode ver algum resultado, caso contrário, ao executar a aplicação, nada aparecerá.

     

    Por exemplo, para imprimir a idade e a idadeNoAnoQueVem podemos escrever o seguinte programa de exemplo:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Representar números inteiros é fácil, mas como guardar valores reais, tais como frações de números inteiros e outros? Outro tipo de variável muito utilizado é o double, que armazena um número com ponto flutuante (e que também pode armazenar um número inteiro).

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O tipo boolean armazena um valor verdadeiro ou falso, e só: nada de números, palavras ou endereços, como em algumas outras linguagens.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    true e false são palavras reservadas do Java. É comum que um boolean seja determinado através de uma expressão booleana, isto é, um trecho de código que retorna um booleano, como o exemplo:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O tipo char guarda um, e apenas um, caractere. Esse caractere deve estar entre aspas simples. Não se esqueça dessas duas características de uma variável do tipo char! Por exemplo, ela não pode guardar um código como '' pois o vazio não é um caractere!

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Variáveis do tipo char são pouco usadas no dia a dia. Veremos mais a frente o uso das Strings, que usamos constantemente, porém estas não são definidas por um tipo primitivo.

     

    Tipos primitivos e valores

     

    Esses tipos de variáveis são tipos primitivos do Java: o valor que elas guardam são o real conteúdo da variável. Quando você utilizar o operador de atribuição = o valor será copiado.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Aqui, i fica com o valor de 6. Mas e j? Na segunda linha, j está valendo 5. Quando i passa a valer 6, será que j também muda de valor? Não, pois o valor de um tipo primitivo sempre é copiado.

     

    Apesar da linha 2 fazer j = i, a partir desse momento essas variáveis não tem relação nenhuma: o que acontece com uma, não reflete em nada com a outra.

     

    Outros tipos primitivos

     

    Vimos aqui os tipos primitivos que mais aparecem. O Java tem outros, que são o byte, short,long e float.

     

    Cada tipo possui características especiais que, para um programador avançado, podem fazer muita diferença.

     

    Casting e promoção

     

    Alguns valores são incompatíveis se você tentar fazer uma atribuição direta. Enquanto um número real costuma ser representado em uma variável do tipo double, tentar atribuir ele a uma variável int não funciona porque é um código que diz: "i deve valer d", mas não se sabe se d realmente é um número inteiro ou não.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O mesmo ocorre no seguinte trecho:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O mais interessante, é que nem mesmo o seguinte código compila:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Apesar de 5 ser um bom valor para um int, o compilador não tem como saber que valor estará dentro desse double no momento da execução. Esse valor pode ter sido digitado pelo usuário, e ninguém vai garantir que essa conversão ocorra sem perda de valores.

     

    Já no caso a seguir, é o contrário:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O código acima compila sem problemas, já que um double pode guardar um número com ou sem ponto flutuante. Todos os inteiros representados por uma variável do tipo int podem ser guardados em uma variável double, então não existem problemas no código acima.

     

    Às vezes, precisamos que um número quebrado seja arredondado e armazenado num número inteiro. Para fazer isso sem que haja o erro de compilação, é preciso ordenar que o número quebrado seja moldado (casted) como um número inteiro. Esse processo recebe o nome de casting.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O casting foi feito para moldar a variável d3 como um int. O valor de i agora é 3.

     

    O mesmo ocorre entre valores int e long.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    E, se quisermos realmente fazer isso, fazemos o casting:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Alguns castings aparecem também:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O código acima não compila pois todos os literais com ponto flutuante são considerados double pelo Java. E float não pode receber um double sem perda de informação, para fazer isso funcionar podemos escrever o seguinte:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    A letra f, que pode ser maiúscula ou minúscula, indica que aquele literal deve ser tratado como float.

     

    Outro caso, que é mais comum:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Você precisa do casting porque o Java faz as contas e vai armazenando sempre no maior tipo que apareceu durante as operações, no caso o double.

     

    E, uma observação: no mínimo, o Java armazena o resultado em um int, na hora de fazer as contas.

     

    Até casting com variáveis do tipo char podem ocorrer. O único tipo primitivo que não pode ser atribuído a nenhum outro tipo é o boolean.

     

    Castings possíveis

     

    Abaixo estão relacionados todos os casts possíveis na linguagem Java, mostrando a conversão de um valor para outro. A indicação Impl. quer dizer que aquele cast é implícito e automático, ou seja, você não precisa indicar o cast explicitamente (lembrando que o tipo boolean não pode ser convertido para nenhum outro tipo).

     

    casting.png

     

    Tamanho dos tipos Na tabela abaixo, estão os tamanhos de cada tipo primitivo do Java.

     

    tamanho_tipos.png

     

    O if e o else

     

    A sintaxe do if no Java é a seguinte:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Uma condição booleana é qualquer expressão que retorne true ou false. Para isso, você pode usar os operadores <, >, <=, >= e outros. Um exemplo:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Além disso, você pode usar a cláusula else para indicar o comportamento que deve ser executado no caso da expressão booleana ser falsa:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Você pode concatenar expressões booleanas através dos operadores lógicos "E" e "OU". O "E" é representado pelo && e o "OU" é representado pelo ||.

     

    Um exemplo seria verificar se ele tem menos de 18 anos e se ele não é amigo do dono:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Esse código poderia ficar ainda mais legível, utilizando-se o operador de negação, o !. Esse operador transforma o resultado de uma expressão booleana de false para truee vice versa.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Repare na linha 3 que o trecho amigoDoDono == false virou !amigoDoDono. Eles têm o mesmo valor.

     

    Para comparar se uma variável tem o mesmo valor que outra variável ou valor, utilizamos o operador ==. Repare que utilizar o operador = dentro de um if vai retornar um erro de compilação, já que o operador = é o de atribuição.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O While

     

    O while é um comando usado para fazer um laço (loop), isto é, repetir um trecho de código algumas vezes. A ideia é que esse trecho de código seja repetido enquanto uma determinada condição permanecer verdadeira.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O trecho dentro do bloco do while será executado até o momento em que a condição idade < 18 passe a ser falsa. E isso ocorrerá exatamente no momento em que idade == 18, o que não o fará imprimir 18.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Já o while acima imprime de 0 a 9.

     

    O For

     

    Outro comando de loop extremamente utilizado é o for. A ideia é a mesma do while: fazer um trecho de código ser repetido enquanto uma condição continuar verdadeira. Mas além disso, o for isola também um espaço para inicialização de variáveis e o modificador dessas variáveis. Isso faz com que fiquem mais legíveis, as variáveis que são relacionadas ao loop:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Um exemplo é o a seguir:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Repare que esse for poderia ser trocado por:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Porém, o código do for indica claramente que a variável i serve, em especial, para controlar a quantidade de laços executados. Quando usar o for? Quando usar o while? Depende do gosto e da ocasião.

     

    Pós incremento ++

     

    i = i + 1 pode realmente ser substituído por i++ quando isolado, porém, em alguns casos, temos essa instrução envolvida em, por exemplo, uma atribuição:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Qual é o valor de x? O de i, após essa linha, é 6.

     

    O operador ++, quando vem após a variável, retorna o valor antigo, e incrementa (pós incremento), fazendo x valer 5.

     

    Se você tivesse usado o ++ antes da variável (pré incremento), o resultado seria 6:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Controlando loops

     

    Apesar de termos condições booleanas nos nossos laços, em algum momento, podemos decidir parar o loop por algum motivo especial sem que o resto do laço seja executado.

     

    for (int i = x; i < y; i++) {

    if (i % 19 == 0) {

    System.out.println("Achei um número divisível por 19 entre x e y");

    break;

    }

    }

     

    O código acima vai percorrer os números de x a y e parar quando encontrar um número divisível por 19, uma vez que foi utilizada a palavra chave break.

     

    Da mesma maneira, é possível obrigar o loop a executar o próximo laço. Para isso usamos a palavra chave continue.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O código acima não vai imprimir alguns números. (Quais exatamente?)

     

    Escopo das variáveis

     

    No Java, podemos declarar variáveis a qualquer momento. Porém, dependendo de onde você as declarou, ela vai valer de um determinado ponto a outro.

     

     

    É necessário se cadastrar para acessar o conteúdo.

     

    O escopo da variável é o nome dado ao trecho de código em que aquela variável existe e onde é possível acessá-la.

     

    Quando abrimos um novo bloco com as chaves, as variáveis declaradas ali dentro só valem até o fim daquele bloco.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    No bloco acima, a variável j pára de existir quando termina o bloco onde ela foi declarada. Se você tentar acessar uma variável fora de seu escopo, ocorrerá um erro de compilação.

     

    cannot_find_symbol.png

     

    O mesmo vale para um if:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Aqui a variável i não existe fora do if e do else! Se você declarar a variável antes do if, vai haver outro erro de compilação: dentro do if e do else a variável está sendo redeclarada! Então o código para compilar e fazer sentido fica:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Uma situação parecida pode ocorrer com o for:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Neste for, a variável i morre ao seu término, não podendo ser acessada de fora do for, gerando um erro de compilação. Se você realmente quer acessar o contador depois do loop terminar, precisa de algo como:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Um bloco dentro do outro

     

    Um bloco também pode ser declarado dentro de outro. Isto é, um if dentro de um for, ou um for dentro de um for, algo como:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Para saber mais

     

    • Vimos apenas os comandos mais usados para controle de fluxo. O Java ainda possui o do..while e o switch. Pesquise sobre eles e diga quando é interessante usar cada um deles.
       
       
    • Algumas vezes, temos vários laços encadeados. Podemos utilizar o break para quebrar o laço mais interno. Mas, se quisermos quebrar um laço mais externo, teremos de encadear diversos ifs e seu código ficará uma bagunça. O Java possui um artifício chamado labeled loops; pesquise sobre eles.
       
       
    • O que acontece se você tentar dividir um número inteiro por 0? E por 0.0?
       
       
    • Existe um caminho entre os tipos primitivos que indicam se há a necessidade ou não de casting entre os tipos. Por exemplo, int -> long -> double (um int pode ser tratado como um double, mas não o contrário). Pesquise (ou teste), e posicione os outros tipos primitivos nesse fluxo.
       
       
    • Além dos operadores de incremento, existem os de decremento, como --i e i--. Além desses, você pode usar instruções do tipo i += x e i -= x, o que essas instruções fazem? Teste.
       

  6. Olá Galera, aqui é o panda!

    Vamos para Aula de Numero 03, IMeu primeiro programa Java!

    Comentem e deixe o feedback de vocês!

     

    Compilando o primeiro programa

    Vamos para o nosso primeiro código! O programa que imprime uma linha simples.

     

    Para mostrar uma linha, podemos fazer:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Mas esse código não será aceito pelo compilador java. O Java é uma linguagem bastante burocrática, e precisa de mais do que isso para iniciar uma execução. Veremos os detalhes e os porquês durante os próximos capítulos. O mínimo que precisaríamos escrever é algo como:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Após digitar o código acima, grave-o como MeuPrograma.java em algum diretório. Para compilar, você deve pedir para que o compilador de Java da Oracle, chamado javac, gere o bytecode correspondente ao seu código Java.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Depois de compilar, o bytecode foi gerado. Quando o sistema operacional listar os arquivos contidos no diretório atual, você poderá ver que um arquivo .class foi gerado, com o mesmo nome da sua classe Java.

    Executando seu primeiro programa

    Os procedimentos para executar seu programa são muito simples. O javac é o compilador Java, e o java é o responsável por invocar a máquina virtual para interpretar o seu programa.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Ao executar, pode ser que a acentuação resultante saia errada devido a algumas configurações que deixamos de fazer. Sem problemas.

    O que aconteceu?

    É necessário se cadastrar para acessar o conteúdo.

     

    O miolo do programa é o que será executado quando chamamos a máquina virtual. Por enquanto, todas as linhas anteriores, onde há a declaração de uma classe e a de um método, não importam para nós nesse momento. Mas devemos saber que toda aplicação Java começa por um ponto de entrada, e este ponto de entrada é o método main.

     

    Ainda não sabemos o que é método, mas veremos no capítulo 4. Até lá, não se preocupe com essas declarações. Sempre que um exercício for feito, o código que nos importa sempre estará nesse miolo.

     

    No caso do nosso código, a linha do System.out.println faz com que o conteúdo entre aspas seja colocado na tela.

     

    Para saber mais: como é o bytecode?

     

    O MeuPrograma.class gerado não é legível por seres humanos (não que seja impossível). Ele está escrito no formato que a virtual machine sabe entender e que foi especificado que ela entendesse.

     

    É como um assembly, escrito para esta máquina em específico. Podemos ler os mnemônicos utilizando a ferramenta javap que acompanha o JDK:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    E a saída:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É o código acima, que a JVM sabe ler. É o "código de máquina", da máquina virtual.

     

    Um bytecode pode ser revertido para o .java original (com perda de comentários e nomes de variáveis locais). Caso seu software vá virar um produto de prateleira, é fundamental usar um ofuscador no seu código, que vai embaralhar classes, métodos e um monte de outros recursos (O Panda aqui indica https://www.guardsquare.com/en/proguard).

    VAMOS FAZER UM EXERCICIO!

    Agora, usando um editor de texto de sua preferência (Bloco de Notas, Sublime, Notepad++, etc) crie o seu primeiro programa Java imprimindo uma mensagem diferente. Comece criando a class MeuProgramaModificado:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Lembre-se que todo o código será inserido dentro das chaves. Dentro da classe coloque o método main:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Dentro do método coloque um System.out.println("sua mensagem aqui"); para imprimir uma mensagem. Salve o arquivo como "MeuProgramaModificado.java".

     

    Compile o programa com a linha de comando:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    E execute o programa usando o java:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Compartilhe aqui o código de sua classe.

    • Curtir 1
  7. Olá Galera, aqui é o panda!

    Vamos para Aula de Numero 02, Instalando o Java!

    Comentem e deixe o feedback de vocês!

     

    Há muitas empresas que implementam uma VM do Java, como a própria Oracle, a IBM, a Apache e outros. Apesar da VM da Oracle ser a mais usada e possuir versões para Windows, Linux e Solaris, para cada OS diferente o processo de instalação varia.

     

    Siga aqui os passos de instalação de uma VM no sistema operacional que você usa: Linux, Mac OSX ou Windows:

     

    Linux

     

    No Ubuntu o processo de instalação mais rápido e simples é o do open-jdk, uma implementação open source do JDK:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    No Linux Fedora você pode instalar com:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Após a instalação no seu Linux teste seu java com os comandos:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Mac OSX

     

    No Mac OSX você pode baixar a versão 1.7 do Java SDK em http://jdk7.java.net/macportpreview/ Após executar o instalador, será necessário entrar no painel de Preferences, Java Preferences e alterar a versão do Java para a nova que você acaba de instalar.

     

    Após a instalação no seu Mac OSX teste seu java com os comandos :

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É necessário se cadastrar para acessar o conteúdo.

     

    Windows

     

    Por fim, para instalar o SDK do Windows, acesse: http://www.oracle.com/technetwork/java/

     

    Dentre os top downloads, escolha o Java SE: http://www.oracle.com/technetwork/java/javase/downloads/index.html

     

    Escolha então o JDK (Java Development Kit) e por fim a versão de seu sistema operacional. Execute o arquivo jdk-versão-windows-arquitetura-p.exe e passe pelo wizard de instalação. O registro de sua VM no site da Oracle é opcional.

     

    Clique agora com o botão da direita sobre o Computador, escolha Propriedades. Na aba Configurações Avançadas do Sistema clique em Variáveis de Ambiente. Aqui, dependendo da sua versão do Windows, as coisas podem variar um pouco, mas se tiver alguma dúvida entre em contato conosco pelo fórum!

     

    Clique no botão Novo para adicionar uma nova variável do sistema: seu nome é JAVA_HOME (tudo maiúsculo) e seu valor será o diretório onde instalou o Java (provavelmente algo como C:\Program Files\Java\jdk1.7.0_03).

     

    Agora vamos alterar a variável do sistema PATH (ou Path). Não crie uma variável nova, altere a variável PATH que já existe. Escolha ela e clique em Editar. No final do valor atual complemente com o valor %JAVA_HOME%\bin. Não se esqueça do ponto e vírgula que separa o path anterior desse novo path que estamos colocando.

     

    Caso já houvesse, por exemplo, o valor %SystemRoot%\system32 na variável do sistema PATH, o valor final ficaria %SystemRoot%\system32;%JAVA_HOME%\bin.

     

    Pronto, feche todas as janelas e abra o prompt, indo em Iniciar, Executar e digite cmd.

     

    Após a instalação no seu Windows teste seu java com os comandos:

     

    É necessário se cadastrar para acessar o conteúdo.

     

    É necessário se cadastrar para acessar o conteúdo.

    • Curtir 1
  8. Fala galera, andei sumido do fórum, mas estou voltando com força total, irei postar uma serie de postagens que é um curso completo de java. Iremos iniciar com java primeiros passos, passar para Orientação a Objetos e analise de erros.

    Será apenas textual por hora, mas em breve todos esses textos iremos te vídeos.

    E em cada texto terá um Questionário ou exercícios para vocês fazerem lab, afinal só aprendemos a programar praticando.

    Irei postar ainda hoje todo conteúdo de java primeiros passos, e ja estou preparando o Orientação a Objeto.

    A linguagem Java

    Entender um pouco da história da plataforma Java é muito importante para enxergar os motivos que a levaram ao sucesso.

     

    Quais eram os maiores problemas para programadores na década de 1990?

    • ponteiros?
    • gerenciamento de memória?
    • organização?
    • falta de bibliotecas?
    • ter de reescrever parte do código ao mudar de sistema operacional?
    • custo financeiro de usar a tecnologia?

    A linguagem Java resolve bem esses problemas, que até então apareciam com frequência nas outras linguagens. Alguns desses problemas foram particularmente atacados porque uma das grandes motivações para a criação da plataforma Java era de que essa linguagem fosse usada em pequenos dispositivos, como tvs, videocassetes, aspiradores, liquidificadores e outros. Apesar disso a linguagem teve seu lançamento focado no uso em clientes web (browsers) para rodar pequenas aplicações (applets). Hoje em dia esse não é o grande mercado do Java: apesar de ter sido idealizado com um propósito e lançado com outro, o Java ganhou destaque no lado do servidor.

     

    O Java foi criado pela Sun (http://www.sun.com) e mantida através de um comitê (http://www.jcp.org). Seu site principal era o java.sun.com, e java.com um site mais institucional, voltado ao consumidor de produtos e usuários leigos, não desenvolvedores. Com a compra da Sun pela Oracle em 2009, muitas URLs e nomes tem sido trocados para refletir a marca da Oracle. A página principal do Java é: http://www.oracle.com/technetwork/java/.

     

    No Brasil, diversos grupos de usuários se formaram para tentar disseminar o conhecimento da linguagem. Um deles é o GUJ (http://www.guj.com.br), uma comunidade virtual com artigos, tutoriais e fórum para tirar dúvidas, o maior em língua portuguesa com mais de cem mil usuários e 1 milhão de mensagens.

     

    Encorajamos todos os alunos a usar muito os fóruns do mesmo, pois é uma das melhores maneiras para achar soluções para pequenos problemas que acontecem com grande frequência.

    Máquina Virtual

    Em uma linguagem de programação como C e Pascal, temos a seguinte situação quando vamos compilar um programa: o código fonte é compilado para código de máquina específico de uma plataforma e sistema operacional. Muitas vezes o próprio código fonte é desenvolvido visando uma única plataforma!

     

    Esse código executável (binário) resultante será executado pelo sistema operacional e, por esse motivo, ele deve saber conversar com o sistema operacional em questão.

     

    Isto é, temos um código executável para cada sistema operacional. É necessário compilar uma vez para Windows, outra para o Linux, e assim por diante, caso a gente queira que esse nosso software possa ser utilizado em várias plataformas. Esse é o caso de aplicativos como o OpenOffice, Firefox e outros.

     

    Na maioria das vezes, a sua aplicação se utiliza das bibliotecas do sistema operacional, como, por exemplo, a de interface gráfica para desenhar as "telas". A biblioteca de interface gráfica do Windows é bem diferente das do Linux: como criar então uma aplicação que rode de forma parecida nos dois sistemas operacionais?

     

    Precisamos reescrever um mesmo pedaço da aplicação para diferentes sistemas operacionais, já que eles não são compatíveis.

     

    Já o Java utiliza do conceito de máquina virtual, onde existe, entre o sistema operacional e a aplicação, uma camada extra responsável por "traduzir" - mas não apenas isso - o que sua aplicação deseja fazer para as respectivas chamadas do sistema operacional onde ela está rodando no momento.

     

    Dessa forma, a maneira com a qual você abre uma janela no Linux ou no Windows é a mesma: você ganha independência de sistema operacional. Ou, melhor ainda, independência de plataforma em geral: não é preciso se preocupar em qual sistema operacional sua aplicação está rodando, nem em que tipo de máquina, configurações, etc.

     

    Repare que uma máquina virtual é um conceito bem mais amplo que o de um interpretador. Como o próprio nome diz, uma máquina virtual é como um "computador de mentira": tem tudo que um computador tem. Em outras palavras, ela é responsável por gerenciar memória, threads, a pilha de execução, etc.

     

    Sua aplicação roda sem nenhum envolvimento com o sistema operacional! Sempre conversando apenas com a Java Virtual Machine (JVM).

     

    Essa característica é interessante: como tudo passa pela JVM, ela pode tirar métricas, decidir onde é melhor alocar a memória, entre outros. Uma JVM isola totalmente a aplicação do sistema operacional. Se uma JVM termina abruptamente, só as aplicações que estavam rodando nela irão terminar: isso não afetará outras JVMs que estejam rodando no mesmo computador, nem afetará o sistema operacional.

     

    Essa camada de isolamento também é interessante quando pensamos em um servidor que não pode se sujeitar a rodar código que possa interferir na boa execução de outras aplicações.

     

    Essa camada, a máquina virtual, não entende código java, ela entende um código de máquina específico. Esse código de máquina é gerado por um compilador java, como o javac, e é conhecido por "bytecode", pois existem menos de 256 códigos de operação dessa linguagem, e cada "opcode" gasta um byte. O compilador Java gera esse bytecode que, diferente das linguagens sem máquina virtual, vai servir para diferentes sistemas operacionais, já que ele vai ser "traduzido" pela JVM.

     

    Momento lab!

     

    1- Qual a Importancia do Java?

    2- Cite Três Aplicações do Java!

    • Curtir 1
  9. VENHO TRAZER ALGUNS DOODLES QUE A GOOGLE JÁ FEZ!

     

    DIA DO PROFESSOR:

    teachers-day-2017-singapore-5553517388365824-2xa.gif

    GRANDE ECLIPSE DAS AMERICAS 2017:

    great-american-eclipse-2017-5750068496826368-2xa.gif

    DIA DAS CRIANÇAS (2015)

    hfY-Pa3edXOGnwSVq03t4BVcCt4TdA4aDFfO6p6CtncoxK4M8v3uScA15eVSLxO7jXlia3cNSFVYhM6q5Qse9gQOSOthnQOkT6MhWNqS=s660

    DIA DAS MÃES:

    mothers-day-2015-panama-5636854686679040-hp2x.gif

    EXITEM VÁRIOS DOODLES AFINAL CADA PAÍS FAZ O SEU! ENTÃO TODOS OS DIAS EXISTEM NOVIDADES DESSA ARTE GRÁFICA QUE FOI DESENVOLVIDA PELA GOOGLE E QUE PEGOU MODA. ALGUNS SÃO ATÉ INTERATIVOS KKKK

    • Curtir 2
  10. QUAL O EMPREGO MAIS LEGAL DA GOOGLE?

     

    SIIIM FAZER DOODLES

     

     

     

    Não é todo dia que você conhece pessoas que tenham um trabalho inspirador ou coisa do tipo. Bom, essa quarta-feira foi um dia desses. Conversei com os doodlers, um time do Google responsável por mudar o logo do buscador em situações especiais - os chamados doodles.

     

    Nem preciso ficar enrolando aqui, dizer que a Copa do Mundo é um evento que faz o planeta Terra inteiro se ligar no mundo da bola, que o Google quis aproveitar a oportunidade e chamar a atenção da internet mundial para a "atmosfera copística", mimimimi... Resumindo em duas palavras o que a gigante das buscas fez: doodles sensacionais.

    doodle-favela.gif

    Foi a primeira vez que a equipe de desenhistas saiu da Califórnia e veio criar, publicar e se divertir (por que não?) em outro lugar do mundo, no caso, aqui no Brasil. Conversei com os simpáticos Matthew Cruickshank e Leon Hong sobre essa "aventura durante a Copa do Mundo que ocorreu a alguns anos atrás".

     

    Uma das coisas mais legais que o Matthew me contou é o quanto ele ficou animado em mostrar características do Brasil para o mundo: as favelas, praias, estádios e tudo mais. Quando o nosso câmera Zé pediu para aproximar as cadeiras na hora de entrevista, o doodler mandou na lata:

    - Ficar mais perto? Claro, isso é bem brasileiro mesmo.

    E mandou logo um abraço depois. Acho que ele já está sendo influenciado pela hospitalidade (ou talvez o "ar puro") de São Paulo.

     

    De qualquer forma, ele não nega que o que faz é o trabalho mais legal de uma companhia cheia de coisas legais para fazer. Afinal, quem é que não quer passar o dia inteiro rabiscando e fazer animações em homenagem a John Lennon, Fred Mercury, Pac-Man, Doctor Who e companhia?

     

    Mais: tudo isso, vestindo chinelo, escutando discos e nesse "escritório":

    montagem-google-doodlers-daia.jpg

  11. Primeiramente Bom Dia, Boa Tarde e Boa Noite!

     

    Pretendo Começar a estudar um pouco sobre Designer Gráfico!

    Tem algum livro que me recomendam para ter acesso a esse conteúdo.

    Mexo mais ou menos com Photoshop mas nada tão profissional ao ponto de ser considerado um Designer.

  12. Engenharia de requisitos: processos e técnicas no contexto organizacional

    Autores: Edna Pacheco Zanlorenci - GPS

    Robert Carlise Burnett - PUC - PR

    Pedro Oliveira - Google - SP

     

    Resumo

     

    Do ponto de vista conceitual, são abordados os fundamentos da engenharia de requisitos, os processos inerentes ao descobrimento, análise, validação e documentação dos requisitos, bem como as técnicas aplicáveis ao desenvolvimento dos processos.

     

    Do ponto de vista da aplicação, é apresentada a abordagem de estudo do contexto organizacional, como uma das técnicas utilizáveis para o conhecimento do problema.

     

    1.Introdução

     

    O interesse por uma abordagem sistemática do conhecimento de problema, levou à busca de apoio de uma nova área de pesquisa, a engenharia de requisitos.

     

    A Engenharia de Requisitos , pode ser definida como o processo sistemático de desenvolvimento de requisitos através de um processo iterativo e cooperativo de análise de problema, de documentação de observações resultantes em uma variedade de formatos de representação e de checagem da precisão do entendimento obtido.

     

    O processo de engenharia de requisitos é um conjunto estruturado de atividades para extrair requisitos, validá-los e mantê-los.

     

    As técnicas de engenharia de requisitos referem-se ao conjunto de ferramentas aplicáveis ao desenvolvimento dos processos.

     

    Requisitos , simplesmente, podem ser definidos como "algo que um cliente necessita". Entretanto, do ponto de vista de um desenvolvedor, requisito pode também ser definido como "algo que necessita ser projetado".

     

    Stackholders , são todos aqueles que são afetados ou que têm direta ou indiretamente influência sobre os requisitos para um sistema (clientes, usuários, desenvolvedores, gerentes,...).

     

    2 .Conceitos Fundamentais de ER

     

    Sob o ponto de vista conceitual, no contexto da Engenharia de Requisitos, são apresentados os fundamentos da engenharia de requisitos, os requisitos e as especificações do produto e, os diferentes tipos de processos e de técnicas aplicáveis.

     

    2.1 Engenharia de Requisitos

     

    O termo "Requirements Engeneering" é traduzido para o português, como "Engenharia de Requisitos".

     

    Engenharia de Requisitos é um termo relativamente novo que foi inventado para cobrir todas as atividades envolvidas em descobrimento, documentação e manutenção de um conjunto de requisitos para um sistema baseado em computador. O uso do termo engenharia implica em técnicas sistemáticas e repetitíveis a serem usadas para assegurar que os requisitos do sistema sejam completos, consistentes, relevantes,... O termo engenharia de requisitos vem da antecedente engenharia de sistemas, correspondendo à fase de análise de sistemas.

     

    Conceito:

     

    Engenharia = aplicação de princípios matemáticos e científicos às construções.

     

    Requisito = condição que se precisa para atingir um fim, como exigência legal ou necessária para certos efeitos.

     

    "Engenharia de Requisitos

    ... processo sistemático de desenvolvimento de requisitos,

    processo iterativo e cooperativo de análise do problema,documentação de observações resultantes em uma variedade de formatos de representação,checagem da precisão do entendimento obtido..." K.Pohl CAISE’93

     

    "Requisitos

    ... são expressados em termos de relacionamentos de fenômenos acerca do domínio da aplicação,

    devem ser eventos e estados que possam ser descritos precisos o suficiente para serem confiavelmente reconhecidos no domínio da aplicação..." M Jackson ISRE’95

    A definição de Engenharia de Requisitos , apresentada por Klaus Pohl na 5.Conferência Internacional sobre Engenharia Avançada de Sistemas de Informação (CAISE’93 – The three dimensions of Requirements Engineering) é importante porque clarifica algumas das complexidades da Engenharia de Requisitos: o processo sistemático de desenvolvimento de requisitos, o processo iterativo e cooperativo de análise de problema, o processo de documentação das observações resultantes de uma variedade de formatos de representação e o processo de checagem da precisão do entendimento obtido.

     

    A definição de requisitos apresentada por Michael Jackson no 2.Simpósio Internacional sobre Engenharia de Requisitos (ISRE'95) é importante porque enfatiza o conhecimento do problema no ambiente de negócio do cliente.

     

    2.2 Processo de Engenharia de Requisitos

     

    O processo de engenharia de requisitos é um conjunto estruturado de atividades para extrair, validar e manter um documento de requisitos. Uma completa descrição do processo poderá incluir quais atividades são realizadas, a estruturação ou particionamento destas atividades, quem é responsável pela atividade, as entradas e saídas de/para atividade e as ferramentas usadas para suportar a engenharia de requisitos.

     

    Conceito:

     

    Processo = conjunto de atividades para extrair informação, validar e manter um documento de requisitos.

     

    Tipos Processos:

    • Extração de Requisitos = descobrimento (elicit, em inglês);


    • Análise e Negociação de Requisitos = requisitos acordados;


    • Validação de Requisitos = consistentes, completos, precisos;


    • Gerenciamento de Mudança de Requisitos;


    O processo de Engenharia de Requisitos[4] pode ser entendido como uma série de atividades consistindo de: articulação do conceito inicial, análise de problema, viabilidade e escolha de opções, análise e modelagem e documentação de requisitos. Cada atividade requererá o uso de técnicas potencialmente diferentes.

    • Conceito – o conceito de produto provê um gatilho para o processo de requisitos começar. Este gatilho pode ser um aperfeiçoamento em serviço do cliente, uma necessidade futura, um pequeno aperfeiçoamento incremental no sistema existente ou a necessidade de uso de alguma tecnologia que está disponível;


    • Análise de Problema – preocupação em desenvolver um entendimento da natureza do problema associado ao conceito de produto;


    • Estudo de viabilidade e escolha de opções – preocupação com avaliação de custos e de benefícios das soluções alternativas;


    • Análise e Modelagem – preocupação com a modelagem do domínio da aplicação e do espaço de solução, onde cada atividade pode ser seguida de validação, a fim de checar a precisão da informação reunida e do entendimento obtido;


    • Documentação de Requisitos – complementação do documento de requisitos.


    2.3 Técnicas de Engenharia de Requisitos

     

    O papel das técnicas de engenharia de requisitos pode ser sumarizado como necessário para suportar as diferentes fases do processo de engenharia de requisitos. É um conjunto de ferramentas aplicáveis às atividades para extrair, validar e manter um documento de requisitos.

     

    Conceito:

     

    Técnica = conjunto de ferramentas aplicáveis ao desenvolvimento dos processos.

     

    Tipos Técnicas:

    • Processos ER;


    • Comunicação Humana;


    • Desenvolvimento do Conhecimento;


    • Documentação de Requisitos;


    • Gerenciamento de Requisitos.


    Aplicação:

     

    Para definir quais técnicas do conteúdo do portfólio são necessárias e quando usá-las, é necessário identificar os cenários envolvidos sob o enfoque de dois componentes básicos:

    1. O relacionamento entre o fornecedor de software e o cliente.


    2. O modelo do processo de engenharia de requisitos.


    Existe uma série de abordagens para o entendimento do problema de requisitos:

    • Marketing – interessada no relacionamento entre requisitos e o sucesso de um produto no mercado (suporte ao usuário, pesquisas, grupos de usuários, apresentações produto, grupos de foco, análise de mercado,...);


    • Psicologia e Sociologia – interessada no relacionamento entre requisitos e necessidades de pessoas como seres inteligentes e sociais (entrevistas com usuário, observações, gravação de comportamento do usuário em vídeo, experimentos pensando em voz alta, jogos de cartas, estudos etnográficos,...);


    • Análise Orientada a Objetos (OOA) – interessada no relacionamento entre requisitos e o processo de desenvolvimento do software, iniciando de uma perspectiva de objetos do mundo real (modelo de objetos, comportamentos,...);


    • Análise Estruturada (SSA) – interessada no relacionamento entre requisitos e o processo de desenvolvimento de software, iniciando de uma perspectiva de processos e dados;


    • Projeto Participativo (Participative Design) – interessada em requisitos como parte de um processo que permite o envolvimento ativo do usuário no projeto de sistemas que afeta seu próprio trabalho (reuniões conjuntas e participativas);


    • Interação Computador-Humanos e Fatores Humanos (HCI) – interessada na aceitabilidade de sistemas para pessoas, a usabilidade dos sistemas e o relacionamento entre requisitos e avaliação do sistema em uso;


    • Método Sistemas Soft (SSM) – interessada no relacionamento entre requisitos e como as pessoas trabalham como parte de um sistema organizacional;


    • Qualidade – interessada no relacionamento entre requisitos e a qualidade de um produto, em relação ao processo de aperfeiçoamento que conduz à satisfação do cliente (QFD - quality function deployment,..);


    • Representação Formal Ciência da Computação – interessada no relaciona- mento entre requisitos e a necessidade de precisão da engenharia de software.


    2.4 Abordagem do Problema

     

    O processo de extração de requisitos requer uma análise cuidadosa da organização, do domínio da aplicação, de processos do negócio e, principalmente, da informação do cliente relativa às suas necessidades ou desejos e exigências.

     

    O enfoque do problema no contexto de extração de requisitos é a razão principal para o entendimento, especialização e o domínio do conhecimento. Identificar o que é o problema, qual é a definição do problema, quem tem o problema e, qual a essência do problema sob o ponto de vista de quem o tem, caracteriza a complexidade do processo. Fatos como determinar o que está errado e o que pode ser feito acerca do erro e como identificar o problema em função da diferença entre o que é desejado e o que é percebido pelas pessoas, agregam um esforço considerável ao processo de descobrimento.

     

    O foco no conhecimento do problema é representado na fig.1, considerando as colunas (vertical) como de domínio do projetista e, as linhas (horizontal) como de domínio do cliente, com os pontos de vista respectivos. As células representantes da interseção dos pontos evidenciam o domínio do conhecimento do problema, para compor o projeto de solução:

     

    - essencial - o que deve ser atendido abrange a parte conhecida pelo projetista e pelo cliente, constitui-se no mínimo desejável;

    - expectativa cliente - o que o cliente espera ser atendido abrange a parte conhecida pelo cliente, mas não conhecida pelo projetista; a conseqüência desta falta caracteriza a oportunidade perdida de negócio e a importância do papel do engenheiro de software (projetista);

     

    - expectativa projetista - o que o projetista pode oferecer abrange a parte conhecida pelo projetista, mas não conhecida pelo cliente; a oferta do produto caracterizará o fator surpresa incremental à solução do problema;- nunca realizável - depende do esforço de conhecimento de ambos, projetista e cliente, o que não é declarado, nunca será realizado.

    A resultante dos termos comparativos demonstra o esforço que se tem de investir para redução da coluna desconhecido pelo projetista. Quanto maior for o campo de conhecimento do projetista acerca do problema, tanto maior a oportunidade de negócio e de serviços realizáveis.

     

    engenh1.jpg

     

    fig.1 - foco no conhecimento do problema (fonte D.Gause tutorial ICRE'98 e [1])

     

    Enfim, é necessário distinguir claramente um processo de definição do problema (conhecimento dos requisitos), de um processo de solução do problema (aplicação de ferramentas de software como solução). Isto porque a fonte de problemas vem de dentro de pessoas e o importante é identificar qual o desejo de ter resolvido o problema e se existe realmente o desejo de uma solução.

     

    No contexto do negócio, os assuntos organizacionais [5] e fatores políticos podem influenciar nos requisitos. Nas organizações, a luta pelo poder e relações de influência entre diferentes pessoas dificultam um denominador comum quanto à propriedade da informação e a definição da melhor forma de administrá-la. Cabe aí uma negociação cuidadosa e a delimi- mitação de fronteiras, com o estabelecimento de objetivos, o entendimento do histórico e estrutura organizacional e a própria organização do conhecimento.

     

    A fonte de informação cliente é composta por uma variedade de requisitos expressa de acordo com a posição que a pessoa ocupa na organização e o seu nível de interesse e comprometimento na identificação de problemas e na procura de solução.

     

    3 Contexto da Aplicação

     

    Sob o ponto de vista da aplicação é apresentada a ferramenta SSM (Soft Systems Methodology), um método de estudo do contexto organizacional. A essência do SSM [3] é que ele reconhece que os sistemas estão enraizados na área de atuação humana dentro de um contexto organizacional. O SSM supre os meios para o entendimento abstrato dos requisitos do sistema, pela análise do contexto organizacional, o entendimento do problema a ser resolvido e conhecimento de sistemas existentes disponíveis no mercado. Ele foi um dos primeiros métodos a introduzir a noção de ponto de vista, onde diferentes pontos de vista apresentam diferentes percepções do problema e requisitos de solução.

     

    3.1 SSM – Método de Sistema de Software

     

    A abordagem SSM [4] reconhece que todas as ações humanas se dão dentro de um contexto organizacional. Os elementos básicos da técnica foram estabelecidos no início da década de 1970 e refinados em vários anos por um processo de ação de pesquisa. Envolveu aplicação de técnicas para situações de problemas reais, avaliando sua efetividade e fazendo ajustes de acordo com as necessidades. Não é precisamente a definição de uma metodologia, mas uma coleção de conceitos que os analistas podem usar em variadas formas que encontrem aplicação.

     

    SSM é importante porque tem um número de características que não são explicitadas pela maioria dos métodos tradicionais. Dobbin e Bustard [4 (1994)] apresentaram um resumo destas características:

     

    - tratamento da situação problema - diz respeito à análise inteira da situação problema, por considerar a abrangência do ambiente do sistema tanto quanto a investigação sobre o sistema. Não examina um problema, mas a situação em que existe percepção para ser um problema;

     

    - ênfase sobre comportamento - foca sobre identificação de propósito de um sistema e as atividades necessárias para encontrar estes propósitos. Evita explicitamente uma consideração de sistema estruturado inicialmente;

     

    - ênfase sobre mudanças - é uma metodologia baseada sobre a idéias de mudança em uma situação problema. O modelo de sistema proposto é comparado com o atual a fim de determinar mudanças necessárias;

     

    - múltiplas perspectivas - a essência é a análise da situação problema de um número de diferentes perspectivas ou pontos de vista. Sistemas usualmente servem a um número de diferentes propósitos e um conhecimento de múltiplos pontos de vista provê o mecanismo para identificação e resolução de conflitos;

     

    - dirigida a objetivos - foca sobre o sistema desejável e como alcançá-lo, de preferência, iniciando com a situação atual e considerando como implementá-lo;

     

    - ênfase sobre controle e monitoração - reconhece a importância do controle em qualquer sistema, requerendo a presença de uma atividade de monitoração e controle.

     

    A metodologia básica é representada na fig.2, segundo [4 - (Wilson,1984)] em sete estágios distintos:

     

    1. descobrindo a situação problema;

     

    2. expressando a situação problema (rica des-crição do mundo real);

     

    3. seleção, isto é, selecionando como visualizar a situação para compreensão e produzindo definições abstratas;

     

    4. construindo modelo conceitual do que o sistema deve fazer para cada definição abstrata;

     

    5. comparação do modelo conceitual com o mundo real;

     

    6. identificação de viabilidade e mudanças desejáveis;

     

    7. recomendações de ações para superação da situação problema.

     

     

    engenh2.jpg

     

    fig.2 - uma visão de SSM - (fonte [4])

     

     

     

     

    As recomendações de uso da metodologia referem-se à liberdade de utilização e à forma de representação do conhecimento. Primeiro, é possível iniciar a metodologia em qualquer estágio adequando-a ao momento e ao contexto em estudo. Segundo, a linguagem de representação das informações do mundo real, ou seja, referente aos estágios situados acima da linha divisória, deve ser expressada de forma facilmente entendível pelo pessoal envolvido com a situação problema, na forma simbólica ou textual. Enquanto que os estágios situados abaixo da linha, correspondentes às idéias de sistema acerca do mundo real, requerem uma linguagem especializada de sistemas, no modo formal, ou seja, "válida se e, somente se" atender a determinadas condições.

     

    A aplicação da metodologia é melhor detalhada em [4, cap3], com exemplos aplicáveis a um sistema de locação de veículos. As justificativas de propósito de cada estágio são explicitadas da seguinte maneira:

     

    1. a situação problema: não estruturada - é para descrever a situação problema, onde a informação é reunida acerca de quem é envolvido, quais suas percepções da situação, qual a estrutura de organização e quais processos representam;

     

    2. a situação problema: expressada - é para descrever as características importantes da situação problema que ajudarão a definição abstrata de sistemas relevantes;

     

    3. definição abstrata de sistema relevante - é para definir notações de sistemas que são relevantes para a situação problema. Isto inclui um roteiro sumarizado pelo mnemônico "CATWOE", com uso recomendado para exploração e incorporação dos variados pontos de vista:

     

    - C (customers) - clientes que são beneficiários ou vítimas do sistema;

    - A (actors) - atores que desempenham atividades definidas;

     

    - T (tranformations) - transformações de entradas em saídas;

     

    - W (weltanschauung) - visão do mundo, representações de pontos de vista;

     

    - O (owner) - proprietário ou quem tem o poder para autorizar ou desfazer o sistema;

     

    - E (environment) - restrições ambientais, elementos restritivos ou condicionantes para o sistema;

     

    4. modelo conceitual - é um modelo de atividade humana que rigorosamente representa uma definição abstrata. Para a checagem do modelo conceitual, podem ser utilizadas outras técnicas de idéias sobre sistemas 4b, mas a principal inclui um roteiro formal 4a. A técnica formal no exemplo provê a validação de um sistema de atividade humana S, utilizando o modelo formal de sistema, isto é, o modelo conceitual é válido se, e somente se, atende às condições:

     

    - S tem um propósito ou missão;

    - S tem uma medida de desempenho;

     

    - S contém um processo de decisão;

     

    - S tem componentes que são também sistemas contendo todas as propriedade de S;

     

    - S tem componentes que interagem de tal forma que efeitos e ações podem ser transmitidos através do sistema;

     

    - S existe em grandes sistemas e/ou ambientes com que ele interage;

     

    - S tem uma fronteira, separando-o de um sistema maior ou ambiente que é formalmente definido pela área dentro do processo de decisão e tem poder para causar ação;

     

    - S tem recursos, físicos e através de participantes humanos, que estejam à disposição do processo de decisão;

     

    - S tem alguma garantia de continuidade, isto é, tem algum termo longo de estabilidade ou irá obter estabilidade após algum grau de turbulência.

     

    5. comparação - é para comparar as atividades descritas no modelo conceitual com o que acontece no mundo real. Para cada atividade deve ser feito o questionamento:

     

    - é uma atividade realizada no mundo real?- como ela é feita?

    - como é medido seu desempenho?

     

    - é a atividade realizada efetivamente?

     

    6. definição de viabilidade e mudança desejável - é para investigar quais atividades são ambas viáveis culturalmente e sistematicamente desejáveis. Isto pode envolver a exploração de viabilidade de movimentação da situação atual para a situação insinuada pelo modelo conceitual, trazendo pessoas para compartilhar o entendimento de diferentes percepções da situação e fazer com que as mesmas julguem o nível desejável das atividades.

     

    7. ação para resolver ou superar o problema - é para usar a informação reunida como uma base para o projeto da solução ou escolha de opção e para planejamento de uma implementação aceitável.

     

    Os sete estágios constituem a descrição básica do SSM e contribuem para o aperfeiçoamento do processo de articulação do conceito de produto, análise de problema, análise de opções e também:

     

     

    - prover uma forma de pensar acerca da organização atual e identificar o potencial de mudança;

     

    - ajudar a identificar os stackholders chave e seus objetivos;

     

    - ajudar a identificar grupos de trabalho chave e seus objetivos;

     

    - ajudar a identificar que papéis de trabalho poderão ser suportados e por quê;

     

    - ajudar a descrever descrições de papéis de trabalho;

     

    - ajudar a descrever visões e propósitos de projeto;

     

    - suportar comunicação entre pessoas;

     

    - ajudar a encontrar conflitos entre stackholders e entre pontos de vista.

    4 Conclusão

    Identificar e aplicar a técnica mais adequada para o desenvolvimento de um processo de engenharia de requisitos depende do tipo de produto ou de serviço ou de resultado que se deseja obter ou oferecer ao cliente. Caberá ao engenheiro de software, em função do ambiente do negócio e da especificidade do produto, adequar ao processo de desenvolvimento de requisitos, as ferramentas e as técnicas individualmente ou em conjunto, com o objetivo único e verdadeiro de se obter o conhecimento do problema, no contexto dos variados pontos de vista do cliente e das perspectivas de solução.

     

    O método apresentado como modelo de estudo para o contexto organizacional não sozinho, mas associado a outras técnicas (a exemplo de projeto participativo envolvendo o cliente na solução), é o que mais se aproxima do entendimento de problemas.

     

    Referências Bibliográficas

    [1] GAUSE, Donald C., WEINBERG, Gerald M. Exploring requirements (quality before design). USA : Dorset House Publishing, 1989. 300 p.

     

    [2] JACKSON, Michael. Software requirements and specifications: a lexicon of pratice, principles and prejudices. Massachustes : Addison-Wesley, 1995. 228 p.

     

    [3] KOTONYA, Gerald; SOMMERVILLE, Ian. Requirements engineering (processes and techniques). England : John Wiley & Sons, 1998. 282 p.

     

    [4] MACAULAY, Linda A. Requirements engineering. Great Britain : Springer-Verlag London, 1996. 202 p.

     

    [5] SOMMERVILLE, Ian; SAWYER, Pete. Requirements engineering (A good practice guide). England : John Wiley & Sons, 1997. 391 p.

     

    engenh3.jpg

    • Curtir 1
  13. Fala galera!

    Fiquei meio off esses dias mas estou voltando a ativa o tio panda!

    Hoje quero falar um pouco sobre a pedra do sapato de muitos desenvolvedores que é o documento de requisito.

    Bem... quem já estudou ou já trabalhou como analista de requisito sabe o quanto é difícil criar uma documentação de requisito nos moldes do que o cliente quer. muitas das vezes o próprio cliente não sabe explicar as fazes do processo envolvido na empresa dele por já ser algo "automático", e quando consegue explicar muitas das vezes ele explica com o "ovo na boca" e não consegue explanar bem o que ele quer dizer e isso é um grande dificultador do trabalho.

    cabe ao analista de requisitos ele conseguir abstrair algo que seja fundamental ao projeto, e consiga criar uma documentação que passe o desejo do cliente aos desenvolvedores, exemplificando a funcionalidade de cada um dos itens e componentes do requisito.

     

    E na minha opinião é uma das mais importantes áreas do processo de um projeto, pois uma historia bem colhida leva a um desenvolvimento nos moldes do cliente, assim encurtando os prazos e precisando de poucas reformulações ou quase nenhuma.

    irei trazer alguns conteúdos sobre engenharia de requisitos, ensinar a fazer um documento de requisito bem feito e etc.

    Espero que tenham gostado, e mais uma vez perdão por não estar presente, acabei passando por alguns problemas mas agora estou na ativa novamente.

    • Curtir 1
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.