A maior rede de estudos do Brasil

material de linguagem de programaçao java


2 resposta(s)

User badge image

Andre Luis

Há mais de um mês

PROGRAMAÇÃO ORIENTADA A OBJETOS NOTA AOS PROGRAMADORES “C” A leitura deste hipertexto é fortemente recomendada para os programadores que tem “C” ou ”C+ +” como sua principal linguagem de programação, mesmo antes de iniciar a leitura deste tutorial: “DOWNLOAD” “BROWSERS” http://www.cafeaulait.org/javatutorial.html “Brewing Java: A Tutorial”, Um tutorial de Java que segue o estilo do livro inicial sobre “C”, escrito por Kernighan & Ritchie [2], é a referência básica para este texto. Cobre principalmente sintaxe de loops e outros assuntos fáceis não abordados aqui. Iniciaremos com um pouquinho de teoria sobre orientação a objetos. Se você quiser algum hipertexto para aprofundamento ou para ler em paralelo com esta introdução sobre classes e objetos e use: “TUTORIAIS” http://java.sun.com/docs/books/tutorial/java/concepts/ “Introdução a orientação a objetos e Java em inglês” CLASSES E OBJETOS Uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, algo mais ou menos como o tipo inteiro contém o molde para as variáveis declaradas como inteiros. A classe envolve, associa, funções e dados, controlando o acesso a estes, definí-la implica em especificar os seus atributos (dados) e seus métodos (funções). Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor. Os atributos desta classe seriam: temperatura, velocidade, tensão aplicada. Estes provavelmente seriam representados na classe por tipos como int ou float. Os métodos desta classe seriam funções para alterar a velocidade, ler a temperatura, etc. Um programa editor de textos definiria a classe parágrafo que teria como um de seus atributos uma String ou um vetor de Strings, e como métodos, funções que operam sobre estas strings. Quando um novo parágrafo é digitado no texto, o editor cria a partir da classe Parágrafo um objeto contendo as informações particulares do novo texto. Isto se chama instanciação ou criação do objeto. ESPECIFICANDO UMA CLASSE Suponha um programa que controla um motor elétrico através de uma saída serial. A velocidade do motor é proporcional a tensão aplicada e esta proporcional aos bits que vão para saída serial e passam por um conversor digital analógico. Vamos abstrair todos estes detalhes por enquanto e modelar somente a interface do motor como uma classe, a pergunta é que métodos e que atributos deve ter nossa classe, que argumentos e valores de retorno devem ter os métodos? Representação da velocidade: A velocidade do motor será representada por um atributo inteiro (int). Usaremos a faixa de bitsque precisarmos, caso o valor de bits necessário não possa ser fornecido pelo tipo , usaremos então o tipo long, isto depende do conversor digital analógico utilizado. Representação da saída serial: O motor precisa conhecer a sua saída serial, a sua ligação com o “motor do mundo real”. Suponha uma representação em hexadecimal do atributo endereço de porta serial, um possível nome para o atributo: enderecomotor. Não se preocupe em saber como usar a representação hexadecimal. Alteração do valor da velocidade: Internamente o usuário da classe motor pode desejar alterar a velocidade, cria-se então o método: public void setSpeed(int newSpeed);. O código anterior corresponde ao cabeçalho do método ele é definido junto com a classe motor, associado a ela. O valor de retorno da função que “implementa” o método é void, poderia ser criado um valor de retorno (boolean) que indicasse se o valor de velocidade era permitido e foi alterado ou não era permitido e portanto não foi alterado. O ato de invocar um método também é chamado de passar uma mensagem para o objeto que está executando este método. Não faz sentido usar, chamar, este método separado de uma variável do tipo motor, mas então porque na lista de argumentos da função não se encontra um motor? Este pensamento reflete a maneira de associar dados e código (funções) das linguagens procedurais. Em linguagens orientadas a objetos o código e os dados são ligados de forma diferente, a própria declaração de um tipo definido pelo usuário já engloba as declarações das funções inerentes a este tipo, isto será explicado em “CLASSES”. O objeto ao qual é aplicado o método é passado de outra forma. Note que não fornecemos o código do método, isto não é importante, por hora a preocupação é com a interface definida pela classe: seus cabeçalhos de métodos e atributos. Apenas pense que sua interface deve ser flexível de modo a não apresentar entraves para a criação do código que seria feita numa outra etapa. Nesta etapa teríamos que imaginar que o valor numérico da velocidade deve ir para o conversor onde irá se transformar numa diferença de potencial a ser aplicada nos terminais do motor, etc. Um diagrama simplificado da classe motor com os atributos e métodos: Este e outros diagramas deste texto foram elaborados com uma ferramenta case para “object oriented modeling and design” segundo a metodologia descrita em [1] Acessores de atributos: Você pode se perguntar porque não usamos um método de nome alteraVelocidade(nova velocidade) envés de setSpeed(newspeed), uma vez que estamos escrevendo o tutorial e também o código em lingua portuguesa. A razão é um padrão de programação Java chamado “beans” que especifica que qualquer método que altere somente o valor de um atributo de nome X deve se chamar setX e qualquer método que retorne o valor de um atributo de nome X deve se c
PROGRAMAÇÃO ORIENTADA A OBJETOS NOTA AOS PROGRAMADORES “C” A leitura deste hipertexto é fortemente recomendada para os programadores que tem “C” ou ”C+ +” como sua principal linguagem de programação, mesmo antes de iniciar a leitura deste tutorial: “DOWNLOAD” “BROWSERS” http://www.cafeaulait.org/javatutorial.html “Brewing Java: A Tutorial”, Um tutorial de Java que segue o estilo do livro inicial sobre “C”, escrito por Kernighan & Ritchie [2], é a referência básica para este texto. Cobre principalmente sintaxe de loops e outros assuntos fáceis não abordados aqui. Iniciaremos com um pouquinho de teoria sobre orientação a objetos. Se você quiser algum hipertexto para aprofundamento ou para ler em paralelo com esta introdução sobre classes e objetos e use: “TUTORIAIS” http://java.sun.com/docs/books/tutorial/java/concepts/ “Introdução a orientação a objetos e Java em inglês” CLASSES E OBJETOS Uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, algo mais ou menos como o tipo inteiro contém o molde para as variáveis declaradas como inteiros. A classe envolve, associa, funções e dados, controlando o acesso a estes, definí-la implica em especificar os seus atributos (dados) e seus métodos (funções). Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor. Os atributos desta classe seriam: temperatura, velocidade, tensão aplicada. Estes provavelmente seriam representados na classe por tipos como int ou float. Os métodos desta classe seriam funções para alterar a velocidade, ler a temperatura, etc. Um programa editor de textos definiria a classe parágrafo que teria como um de seus atributos uma String ou um vetor de Strings, e como métodos, funções que operam sobre estas strings. Quando um novo parágrafo é digitado no texto, o editor cria a partir da classe Parágrafo um objeto contendo as informações particulares do novo texto. Isto se chama instanciação ou criação do objeto. ESPECIFICANDO UMA CLASSE Suponha um programa que controla um motor elétrico através de uma saída serial. A velocidade do motor é proporcional a tensão aplicada e esta proporcional aos bits que vão para saída serial e passam por um conversor digital analógico. Vamos abstrair todos estes detalhes por enquanto e modelar somente a interface do motor como uma classe, a pergunta é que métodos e que atributos deve ter nossa classe, que argumentos e valores de retorno devem ter os métodos? Representação da velocidade: A velocidade do motor será representada por um atributo inteiro (int). Usaremos a faixa de bitsque precisarmos, caso o valor de bits necessário não possa ser fornecido pelo tipo , usaremos então o tipo long, isto depende do conversor digital analógico utilizado. Representação da saída serial: O motor precisa conhecer a sua saída serial, a sua ligação com o “motor do mundo real”. Suponha uma representação em hexadecimal do atributo endereço de porta serial, um possível nome para o atributo: enderecomotor. Não se preocupe em saber como usar a representação hexadecimal. Alteração do valor da velocidade: Internamente o usuário da classe motor pode desejar alterar a velocidade, cria-se então o método: public void setSpeed(int newSpeed);. O código anterior corresponde ao cabeçalho do método ele é definido junto com a classe motor, associado a ela. O valor de retorno da função que “implementa” o método é void, poderia ser criado um valor de retorno (boolean) que indicasse se o valor de velocidade era permitido e foi alterado ou não era permitido e portanto não foi alterado. O ato de invocar um método também é chamado de passar uma mensagem para o objeto que está executando este método. Não faz sentido usar, chamar, este método separado de uma variável do tipo motor, mas então porque na lista de argumentos da função não se encontra um motor? Este pensamento reflete a maneira de associar dados e código (funções) das linguagens procedurais. Em linguagens orientadas a objetos o código e os dados são ligados de forma diferente, a própria declaração de um tipo definido pelo usuário já engloba as declarações das funções inerentes a este tipo, isto será explicado em “CLASSES”. O objeto ao qual é aplicado o método é passado de outra forma. Note que não fornecemos o código do método, isto não é importante, por hora a preocupação é com a interface definida pela classe: seus cabeçalhos de métodos e atributos. Apenas pense que sua interface deve ser flexível de modo a não apresentar entraves para a criação do código que seria feita numa outra etapa. Nesta etapa teríamos que imaginar que o valor numérico da velocidade deve ir para o conversor onde irá se transformar numa diferença de potencial a ser aplicada nos terminais do motor, etc. Um diagrama simplificado da classe motor com os atributos e métodos: Este e outros diagramas deste texto foram elaborados com uma ferramenta case para “object oriented modeling and design” segundo a metodologia descrita em [1] Acessores de atributos: Você pode se perguntar porque não usamos um método de nome alteraVelocidade(nova velocidade) envés de setSpeed(newspeed), uma vez que estamos escrevendo o tutorial e também o código em lingua portuguesa. A razão é um padrão de programação Java chamado “beans” que especifica que qualquer método que altere somente o valor de um atributo de nome X deve se chamar setX e qualquer método que retorne o valor de um atributo de nome X deve se c

Essa pergunta já foi respondida por um dos nossos estudantes