Baixe o app para aproveitar ainda mais
Prévia do material em texto
tema 4 Linguagens Orientadas a Objetos Prezado aluno, dando continuidade ao mergulho nos principais paradigmas de programação, esse tema irá aprofundar seu conhecimento no paradig- ma Orientado a Objetos. Ao concluirmos este tema você terá: Compreendido sobre a importância do para- digma Orientado a Objetos; Conhecimento das principais estruturas e conceitos da Orientação a Objetos; Noção de programação com exemplo em lin- guagens utilizadas na indústria, como o JAVA; Clareza e visão ampliada sobre montagem de algoritmos, no paradigma em questão. 4.1 CONCEITOS BÁSICOS DA ORIENTAÇÃO A OBJETOS A Orientação a Objetos é um paradigma que surgiu para aproxi- mar a programação dos conceitos existentes no mundo real. Vamos imaginar que estamos em uma sala de aula. Podemos dizer que estamos inseridos no domínio sala de aula. Nessa sala pos- suem entidades, informações e processos que se relacionam. Como exemplo, é possível imaginar um professor como uma entidade que ensina para outra entidade aluno, ambos possuem informações ine- rentes a cada um e processos distintos para a comunicação. Na Orientação a Objetos o domínio é modelado computacional- mente e as entidades são representadas como objetos. Um objeto do mundo computacional possui atri- butos e métodos. Atributos são os valores que esse ob- jeto pode assumir e méto- dos são as formas que esses valores podem ser modifi- cados. Calma, prezado alu- no, observe o exemplo da Figura 81. Fonte: Autoria própria Figura 81. Objetos em sala de aula Sala de aula 150 Linguagem deProgramação À esquerda temos 3 alunos e um professor representando uma sala de aula. À direita a representação desse domínio em um mundo computacional orientado a objetos. Vamos pontuar alguns aspectos: 1. Temos 3 alunos na sala de aula, eles serão transportados para 3 objetos “ALUNO”; 2. As informações (atributos) que poderíamos adquirir do ob- jeto “ALUNO” são inúmeras, entretanto, temos que mapear o que realmente é importante para o problema que quere- mos resolver, então, no exemplo precisamos apenas da: ma- trícula, nome e da nota; 3. Caso sua solução necessite de um outro atributo, como en- dereço, telefone, idade, sexo, etc., esses poderiam ser tam- bém adicionados, mas o programador deve pensar se isso é realmente necessário para sua solução. Esse conceito é conhecido como abstração; 4. Na ilustração, na parte mais inferior do objeto, temos os mé- todos. Eles são responsáveis por modificar o comportamento do objeto, ou seja, seu atributo. Imagine que o objeto “ALUNO” com atributos de João esteja com o nome errado, para modifi- cá-lo, o método “corrigirNome()” pode ser invocado. Em uma analogia ao paradigma procedural, o método seria equivalente a uma função. Da mesma forma, para adicionar uma nota a um objeto, bastaria invocar o “adicionarNota()”; 5. É importante observar que são objetos do mesmo tipo (“ALUNO”), com a mesma estrutura, entretanto os valores atribuídos são diferentes; 6. Da mesma forma temos um objeto “PROFESSOR” que tem uma estrutura comum para todos os professores que eu for mape- Tema 4 Linguagens Orientadas a Objetos 151 ar em meu domínio computacional que chamamos de Sala de Aula. A estrutura que definimos para o objeto professor é com- posta pelos atributos: matrícula, nome, disciplina e salario; e, os métodos: adicionarDisciplina() e adicionarSalario(); Ficou difícil entender alunos e professores como objetos? Va- mos ver outro exemplo com um objeto do mundo real se tornando um objeto do mundo computacional! Vejam a Figura 82. Figura 82. Objetos Abajur Fonte: Autoria própria Na ilustração acima, temos um objeto do mundo real conhecido como abajur. Observe que em um primeiro momento foi criado um abajur de marca YXZ, cor branca, preço R$120,00 e o atributo ligado com o valor NÃO. Imagine que em um segundo momento o progra- mador precisou liga-lo e, para tal feito, invocou o método “ligar()” que, como pode ser visto na ilustração, aciona a luz do abajur e altera o atributo Ligado para SIM. Acredito que com os exemplos acima tenha ficado claro o que são objetos, atributos e métodos. Antes de visualizar qualquer trecho 152 Linguagem deProgramação de código, vamos aprender outro conceito essencial para a orientação a objetos, o de classe! Para entender o conceito de classe, vamos para mais uma rápida ana- logia! Imagine que você é um engenheiro e te contrataram para construir um condomínio com 10 casas de estrutura exatamente igual. Se essas casas fossem um objeto computacional poderiam ser representadas apenas como “CASA” por possuírem a mesma estrutura física, mas em seus atributos, po- deríamos ter algumas distinções. Uma casa, por exemplo, apesar de ser es- truturalmente igual, pode ter uma cor diferente, cada uma das 10 casas seria de uma cor. No objeto, isso seria facilmente representado por um atributo “cor”. Essa estrutura padrão da casa, para o engenheiro é chamada de planta da casa, para nós é chamada de CLASSE. Na planta da casa o engenheiro irá definir toda a estrutura da casa e nós, toda a estrutura de um determinado tipo de objetos. Vamos à ilustração na Figura 83 . Figura 83. Classes e Objetos Fonte: Autoria própria Tema 4 Linguagens Orientadas a Objetos 153 Na ilustração anterior, com uma única planta foram criadas 3 casas de estrutura idêntica, mas com cores diferentes. A classe fun- ciona de maneira similar. Vamos criar uma classe de nome “CASA”, com 3 atributos sem nenhuma definição (lembre-se que aqui é só a estrutura, nada de valor!): “Número”, para identificação da casa em um condomínio, por exemplo; “Cor”, para definição da cor; e “Aberta” para identificar se a casa está aberta ou fechada. Para manipular os atribu- tos foram criados três métodos: abrirCasa() e fecharCasa(), alteram entre abrir a casa e fechar a casa, respectivamente; e DefinirCor(), para alterar a cor da casa. Com a classe “CASA” criada é possível criar quantos objetos ca- sas forem necessários. Caso nosso condomínio tenha 3 casas, basta instanciar (criar o objeto), 3 objetos “CASA”, cada um com seu próprio estado que é definido pelo atributo. Com a definição em mente, trabalharemos com a linguagem de programação JAVA para codificar nossos exemplos por ser uma lin- guagem tipicamente orientada a objetos. Veja o exemplo da criação da classe “Casa” para representar nossa ilustração na Figura 84. Figura 84. Classe “Casa” em JAVA public class Casa { //Atributos da Classe private int Numero; private String Cor; private String Aberta; //Métodos da Classe public void abrirCasa(){ this.Aberta=”SIM”; } 154 Linguagem deProgramação public void FecharCasa(){ this.Aberta=”NÃO”; } public void Defi nirCor(String textoCor){ this.Cor=textoCor; } } Fonte: Autoria própria Criamos a classe “Casa” com os três atributos e os três métodos descritos anteriormente. Vamos ver alguns pontos importantes: 1. As palavras reservadas public e private informam como as classes, atributos ou métodos podem ser acessados; se um atributo é privado (private), ele só poderá ser modificado de alguma forma se for internamente pela própria classe; já o público (public) permite que o objeto seja criado (instancia- do) em outra classe; 2. Ainda falando dos critérios de visibilidade, é uma boa práti- ca de programação orientada a objetos, manter os atributos da classe privados para que somente possam ser acessados pelos métodos, porém esses, devem ser públicos; 3. “this” é uma palavra reservada que permite o acesso à vari- ável da própria classe. Quando utilizamos “this.Cor = texto- Cor”, por exemplo, queremos dizer que a cor passada para o método por parâmetro (“textoCor”) deverá ser atribuída à Cor do objeto; Tema 4 Linguagens Orientadas a Objetos 155 4. Outra palavra reservada, que também é utilizada na progra- mação procedural, é a “void” que é uma função (na orientação a objetos, método) que não tem retorno, apenas executará o blocode código e sairá dele; 5. Quando o objeto for criado com a classe acima, ele terá Nú- mero, Cor e “Aberta” como atributos, sendo que poderá alte- rar as informações de Cor e “Aberta” através dos atributos. Iremos testar a classe Casa em JAVA, observe a Figura 85: Figura 85. Instanciando um objeto da classe casa public class TestaMetodosCasa { public static void main ( String [] args ) { Casa casa1 = new Casa (); casa1.Defi nirCor(“Azul”); casa1.abrirCasa() } } Fonte: Autoria própria No exemplo, é criada uma nova classe de nome “TestaMetodos- Casa”. O nome é bastante sugestivo! Vamos criar um objeto do tipo “Casa” e trabalhar com os métodos existentes em sua implementação. Acompanhe o raciocínio: 1. Não entraremos nas minúcias, mas existe um método princi- pal em JAVA (“main”), onde a execução do programa é iniciada, ele é definido em “public static void main ( String [] args )”; 156 Linguagem deProgramação 2. Vamos criar um objeto de referência “casa1” do tipo “Casa”. Todos os métodos e atributos existentes na classe “Casa” poderão ser utilizados por esse objeto. Para instanciá-lo uti- liza-se a palavra reservada “new” seguido do objeto “Casa()”. O “Casa” que precede o “casa1” informa que a referência cria- da será do tipo “Casa”; 3. Para modificar o estado do objeto “casa1”, foram utilizadas duas chamadas aos métodos; no primeiro, chama-se o “De- finirCor()” passando como parâmetro a cor “Azul” que será atribuída ao objeto; Da mesma forma, foi invocado o método “abrirCasa()” para trocar o estado do atributo aberta para “SIM”. 4. Ficaram claros os conceitos básicos de orientação a objetos e como são utilizados? Ainda iremos aprofundar nosso co- nhecimento nesse paradigma no decorrer deste tema. Este conteúdo serviu para fixarmos os conceitos básicos através de ilustrações e exemplos na linguagem JAVA. LEITURA COMPLEMENTAR CAELUM. Orientação a objetos básica. Disponível em: < https:// www.caelum.com.br/apostila-java-orientacao-objetos/orienta- cao-a-objetos-basica/>. Acesso em: 13 jun. 2016. A CAELUM é uma empresa que traz uma série de cursos bem elaborados voltados para o mercado, por apresentarem uma abordagem prática. No link acima é possível fortalecer os conceitos trabalhados neste conteúdo, com diversos exemplos na linguagem de programação JAVA. Ao final da leitura, conforme descrito pelos autores, você será capaz de dizer o que é e para que serve orientação a objetos; conceituar classes, atributos e com- portamentos; entender o significado de variáveis e objetos na memória. Tema 4 Linguagens Orientadas a Objetos 157 DEVMEDIA. Introdução à Programação Orientada a Objetos em Java. Disponível em: < http://www.devmedia.com.br/introducao- -a-programacao-orientada-a-objetos-em-java/26452>. Acesso em: 13 jun. 2016. O artigo escrito traz, de maneira descomplicada, conceitos iniciais da programação orientada a objetos em JAVA. O autor apresenta exem- plos simples e analogias que possibilitam uma maior compreensão do assunto. PARA REFLETIR Você conheceu alguns conceitos básicos da linguagem orientada a objetos. Com o conhecimento adquirido sobre programação proce- dural, no tema anterior, o que consegue visualizar como principal di- ferença entre os paradigmas? Você consegue visualizar a vantagem de se utilizar o conceito de objetos na programação? Reflita sobre os questionamentos e sobre os novos conceitos aprendidos. 158 Linguagem deProgramação 4.2 QUATRO PILARES DA ORIENTAÇÃO A OBJETOS: ABSTRAÇÃO, ENCAPSULAMENTO, HERANÇA E POLIMORFISMO Neste conteúdo iremos conhecer o que Machado (2016) preconiza ser os quatro pilares da Orientação a Objetos: Abstração, Encapsulamen- to, Herança e Polimorfismo. Começaremos falando da abstração. ABSTRAÇÃO A abstração é um dos conceitos mais importantes quando trata- mos do paradigma em questão. Abstrair é o poder de escolher corre- tamente os aspectos do mundo real que devem ser representados no mundo computacional. Devemos saber a exata necessidade do nosso sistema para criarmos os atributos e métodos necessários. Já demos exemplo de um objeto casa neste livro. Imagine o nú- mero de atributos que poderíamos listar de uma casa! Pense alguns comigo: Altura, Largura, Comprimento, Número, Quantidade de Jane- las, Cor do telhado, Cor das Paredes etc. Mas, quais desses atributos realmente fazem sentido para o meu software? A ideia de abstrair é ocultar certos detalhes que não são ne- cessários, então, digamos que só precisemos saber a cor da casa e o número da mesma, não há sentido algum, portanto, mapear altura, largura, comprimento, etc. Tema 4 Linguagens Orientadas a Objetos 159 Três pontos são importantes para a abstração: 1. Identidade: é necessário se definir uma identidade para o objeto. Essa identidade deve ser única no sistema para que não haja conflito nem entendimento dúbio sobre o que é esse objeto; 2. Propriedades: As propriedades definem o objeto. Podem ser entendidas como os atributos do objeto; 3. Métodos: Por fim, deve-se imaginar que ações desse objeto podem fazer dentro desse mundo computacional. Vamos conhecer agora outro conceito da Orientação a Objetos, o encapsulamento. ENCAPSULAMENTO O encapsulamento é uma técnica que visa esconder detalhes de implementação do usuário. Em uma analogia com o mundo real, podemos pensar em alguém dirigindo um carro. Quando se dirige um carro, o motorista não tem preocupação em como o motor está fun- cionando, mas apenas utiliza o acelerador e o freio para mantê-lo em movimento e pará-lo. O acelerador e o freio são a interface entre o motorista e o motor e todas as funcionalidades mecânicas do motor do carro estão encapsuladas. Nas linguagens orientadas a objetos, como JAVA, o encapsula- mento é realizado utilizando alguns modificadores de acesso, tal as- sunto será abordado um pouco mais a frente com maiores detalhes. 160 Linguagem deProgramação HERANÇA A Herança é um ponto essencial do paradigma Orientado a Ob- jetos. Para entender, vamos retomar o exemplo da sala de aula que fora iniciado no Tópico 1. Numa sala existem alunos e professores. Concorda comigo que essas duas entidades são pessoas? Que tan- to aluno como professores têm em comum, no mínimo, um atributo “Nome”, por exemplo? Na ilustração da Figura 86 poderemos ver isso de forma mais clara. Figura 86. Representação classe Pessoa Fonte: Autoria própria A classe “PESSOA” possui os atributos “nome”, “idade” e “ende- reço”, além dos métodos “alteraNome()”, “alteraIdade()” e “alteraEnde- reco()”. Vamos aos pontos importantes: Tema 4 Linguagens Orientadas a Objetos 161 1. As classes abaixo da classe “PESSOA” herdam todos os atributos e métodos dela, ou seja, é como se a classe “ALUNO” fosse com- posta por todos os atributos e métodos de “PESSOA” acrescido dos seus, assim como ocorre com a classe “PROFESSOR”; 2. A classe superior (“PESSOA”) é chamada de superclasse e as mais inferiores são subclasses (“ALUNO” e “PROFESSOR”); 3. A superclasse é a mais genérica e as subclasses são espe- cializações dela. A Figura 87 apresenta a implementação dessas classes utili- zando o conceito de herança ilustrado anteriormente. Figura 87. Herança em JAVA class Pessoa { //Atributos da Classe private String Nome; private int Idade; private String Endereco; //Métodos public alteraNome(){} public alteraIdade(){} public alteraEndereco(){} } class Aluno extends Pessoa { //Atributos da Classe private int matricula; private double Nota; //Métodos public adicionarNota(){} } 162 Linguagem deProgramação class Professor extends Pessoa { //Atributos da Classe private int matricula; private String disciplina; private double Salario; //Métodos public adicionarDisciplina (){} public adicionarSalario (){} } Fonte: Autoria própria Foram criadas três classes apenas com a declaração dos atri- butos e sem implementar os métodos, para que fique mais visível a questão da herança. Para que as classes “ALUNO” e “PROFESSOR”herdem os atributos e métodos da classe “PESSOA” é utilizada na de- claração das subclasses a palavra reservada “extends”. Vejamos como são instanciados os objetos de uma classe estendida na Figura 88. Figura 88. Instanciando objetos com herança em JAVA public class TestaHeranca { public static void main ( String [] args ) { Professor testeProf = new Professor(); Aluno testeAluno = new Aluno(); testeProf.alteraNome(); testeAluno.alteraNome(); } } Fonte: Autoria própria Tema 4 Linguagens Orientadas a Objetos 163 Alguns pontos para se observar: 1. Foi possível instanciar um objeto “PROFESSOR” e chamar diretamente um método da superclasse “PESSOA”; 2. Foi possível instanciar também um objeto “ALUNO” e utili- zar um método da superclasse “PESSOA”. E se tivermos um método do mesmo nome na subclasse? Nes- se caso, temos um conceito chamado de sobreposição de métodos. Caso o mesmo método da classe pai (ou superclasse) seja reescrito na sua classe filha (subclasse), quando o método for invocado, o mais especializado é chamado, ou seja, o da subclasse. Em um programa JAVA as classes criadas podem ser organi- zadas e separadas em pacotes distintos. Os pacotes fornecem uma forma melhor de organizar o código. Agora que temos uma boa noção de herança, vamos conversar sobre os modificadores de acesso dos atributos, métodos e classes. Para continuarmos a enriquecer nosso conhecimento, vamos trabalhar mais um conceito de grande importância para o paradigma orientado a objetos, o polimorfismo. POLIMORFISMO Polimorfismo é a possibilidade de algo assumir diferentes formas. Nós já demos um exemplo de polimorfismo anteriormente, lembra? Um método de uma superclasse quando implementado de diferente forma em uma subclasse é um exemplo de polimorfismo. Não exemplificamos anteriormente para aprofundarmos aqui. Observe a Figura 89. 164 Linguagem deProgramação Figura 89. Exemplo de Polimorfismo class Animal { //Métodos public void qualOsom(){ System.out.println(“Animal qualquer!”); } } class Gato extends Animal{ //Métodos public void qualOsom() { System.out.println(“MIAU”); } } class Cachorro extends Animal{ //Métodos public void qualOsom() { System.out.println(“AUAU”); } } class Galinha extends Animal{ //Métodos public void qualOsom() { System.out.println(“COCOCO”); } } } Fonte: Autoria própria Tema 4 Linguagens Orientadas a Objetos 165 A classe “Animal” foi criada como exemplo. A classe contém unica- mente um método “qualOsom()” que servirá para definir o som de algum animal. Um animal é algo muito subjetivo e se você perguntar “qual o som feito por um animal?”, obviamente teríamos diversas respostas e dúvidas sobre o questionamento. Mas, fora criada uma classe animal para agru- par atributos e métodos comuns a qualquer animal, como por exemplo a emissão de um som. Vamos agora especializar a classe “Animal”! Como classes mais especializadas (ou subclasses), foram criadas “Gato”, “Cachorro” e “Galinha” todas estendendo da superclasse “Ani- mal”. Cada subclasse possui sua própria implementação para o método “qualOsom()”. A ideia chave do nosso algoritmo é que ao invocarmos o método “qualOsom()”, o objeto correspondente à classe instanciada res- ponda corretamente. Apenas como observação, o comando “System.out. println” exibe na console do JAVA uma informação qualquer. Vamos tes- tar nosso exemplo de polimorfismo na Figura 90. Figura 90. Testando polimorfismo em JAVA public class TestaPolimorfi smo { public static void main ( String [] args ) { Gato g= new Gato(); Cachorro c = new Cachorro(); Galinha gl = new Galinha(); g.qualOsom(); c.qualOsom(); gl.qualOsom(); } } Fonte: Autoria própria 166 Linguagem deProgramação Foram criados três objetos: um do tipo “Gato”, um “Cachorro”; e outro “Galinha”. Depois de instanciados, cada objeto chama o mesmo método “qualOsom()”. A saída é, respectivamente: 1. MIAU; 2. AUAU; 3. COCOCO. Dessa forma, temos um mesmo método respondendo de for- ma distinta. Espero que os conceitos abordados neste conteúdo tenham fi- cado claros! Vamos continuar nosso mergulho no paradigma Orienta- do a Objetos no próximo conteúdo! LEITURA COMPLEMENTAR CAELUM. Herança, reescrita e polimorfismo. Disponível em: < https://www.caelum.com.br/apostila-java-orientacao-objetos/ heranca-reescrita-e-polimorfismo/#7-2-reescrita-de-metodo >. Acesso em: 12.Jul.2016. Essa indicação de leitura traz um curso de JAVA e Orientação a Obje- tos muito completo, disponibilizado gratuitamente pela empresa CA- ELUM. No link indicado você entenderá o porquê do uso da herança e do polimorfismo, partindo do princípio do aproveitamento de códi- go. Além disso, são apresentados exemplos de com uma superclasse “Funcionário” e exemplos próximos à de uma implementação para um problema do mundo real. No final do capítulo, segundo o autor, você será capaz de: dizer o que é herança e quando utilizá-la; reutilizar có- Tema 4 Linguagens Orientadas a Objetos 167 digo escrito anteriormente; criar classes filhas e reescrever métodos; e usar todo o poder que o polimorfismo dá. CAELUM. Modificadores de acesso e atributos de classe. Dis- ponível em: https://www.caelum.com.br/apostila-java-orienta- cao-objetos/modificadores-de-acesso-e-atributos-de-classe/#- 6-3-getters-e-setters>. Acesso em:21.Jul.2016. Segue um trecho da apostila da CAELUM que discorre sobre a questão de visibilidade, debatida neste tópico. Segundo o autor, ao final da leitu- ra você será capaz de: controlar o acesso aos seus métodos, atributos e construtores através dos modificadores private e public; escrever méto- dos de acesso a atributos do tipo getters e setters; escrever construtores para suas classes; e utilizar variáveis e métodos estáticos. PARA REFLETIR Ao longo de sua carreira, acadêmica ou profissional, você deve ter desenvolvido ou estudado em cima de algoritmos desenvolvidos em paradigma procedural. Rememore alguns exemplos e imagine como esses poderiam ser melhor aproveitados com os conceitos até então estudados. Como a herança poderia auxiliar para um melhor aprovei- tamento de código já escrito? Como a orientação a objetos, como um todo, poderia melhorar seus códigos em quesitos como manutenibili- dade, evolução do software ou para uma menor reescrita de códigos. 168 Linguagem deProgramação 4.3 APROFUNDANDO NA ORIENTAÇÃO A OBJETOS: CONSTRUTORES, MODIFICADORES DE ACESSO, CLASSE ABSTRATA, MÉTODO ABSTRATO E INTERFACES Vamos continuar com mais conceitos e exemplos da Orientação a Objetos. Continuaremos o assunto agora falando sobre construtores. CONSTRUTORES Já vimos que é possível definir os atributos de um objeto após sua criação através da invocação dos métodos, entretanto, existe um “método especial” chamado construtor que permite que os atributos sejam definidos assim que o objeto é instanciado. O construtor é cria- do na classe com o mesmo nome dela. Vamos alterar a classe “Casa”, criando um construtor para a mesma, observe a Figura 91. Figura 91. Construtor da classe “Casa” em JAVA public class Casa { //Atributos da Classe private int Numero; private String Cor; private String Aberta; //Construtor public Casa (int numero) { this.Numero = numero ; } Tema 4 Linguagens Orientadas a Objetos 169 //Métodos da Classe . . . } Fonte: Autoria própria Os métodos foram removidos apenas para facilitar a visualiza- ção da classe. Veja que o construtor tem o mesmo nome da classe. No nosso exemplo o construtor irá apenas definir o atributo “Numero” do objeto, mas é possível definir todos os atributos. Veja como é feita a instanciação do objeto na Figura 92. Figura 92 Instanciando objetos com construtor public class TestaMetodosCasa { public static void main ( String [] args ) { Casa casa1 = new Casa (1); Casa casa2 = new Casa (2); Casa casa3 = new Casa (3); } } Fonte: Autoria própria São instanciados três objetos, mas, dessa vez, é passado por parâmetro um inteiro que correspondeao atributo “Numero”. Então, no exemplo ilustrado, teremos a criação de três objetos “Casa”, sendo que cada objeto terá um valor inteiro diferente atribuído no exato mo- mento de sua criação. 170 Linguagem deProgramação Outro ponto importante na criação do construtor é o conceito de sobrecarga. A sobrecarga ocorre quando existe a implementação de mais de um construtor com diferentes possibilidades de parâmetros. A Figura 93 ilustra essa informação. Figura 93. Sobrecarga de construtor public class Casa { //Atributos da Classe private int Numero; private String Cor; private String Aberta; //Construtor public Casa (int numero) { this.Numero = numero ; } public Casa (String cor) { this.Cor = cor ; } //Métodos da Classe . . . } Fonte: Autoria própria Na alteração realizada na classe “Casa” acima, é possível obser- var que temos dois construtores. A diferença é que em um, o parâ- metro passado é um inteiro e no outro uma string. Quando o objeto Tema 4 Linguagens Orientadas a Objetos 171 for criado, caso ele seja instanciado passando um inteiro como parâ- metro, esse inteiro será atribuído ao atributo “Numero”, se o mesmo for criado passando uma string, o construtor utilizado irá atribuir o valor ao atributo “Cor” do Objeto. Acompanhe a alteração realizada na Figura 94. Figura 94. Instanciando objetos com sobrecarga de construtor public class TestaMetodosCasa { public static void main ( String [] args ) { Casa casa1 = new Casa (1); Casa casa2 = new Casa (“Verde”); Casa casa3 = new Casa (3); } } Fonte: Autoria própria O objeto “casa2” ao ser instanciado passa o valor “Verde” para o construtor. Por ser uma string, o construtor que recebe o parâmetro é o que define o atributo “Cor” do objeto. Os objetos “casa1” e “casa3”, por sua vez, continuam passando um inteiro como parâmetro e ati- vando o primeiro construtor que define o atributo “Numero” do objeto. Agora que definimos e exemplificamos construtores, vamos abordar um assunto que indiretamente vem sendo desenvolvido du- rante os exemplos em JAVA, os modificadores de acesso. 172 Linguagem deProgramação MODIFICADORES DE ACESSO Os modificadores de acesso são a forma de garantir o encap- sulamento na linguagem Orientada a Objetos. O programador pode definir como os atributos, métodos e classes devem ser acessados. Para tal fim, existem os modificadores de acesso que afetam direta- mente a visibilidade desses. Em JAVA, as palavras reservadas utiliza- das são: public, private, protected, default. Veja abaixo a explicação de cada um: public: é a forma de declaração menos restritiva. Pode ser acessa- da de qualquer lugar e por qualquer entidade; private: forma mais restritiva de acesso. Os membros da classe definidos como não podem ser acessados ou usados por nenhu- ma outra classe. O modificador private não pode ser utilizado em classes, apenas em métodos ou atributos. Os métodos e atribu- tos com esse critério de visibilidade podem ser vistos apenas pela classe que pertencem; protected: só são acessados por código escrito em classes de pa- cote igual à classe que pertence ou por classes herdadas; default: quando nenhum modificador é utilizado, temos que os itens tem acesso padrão (default). Esses podem ser acessados quando escritos em classes de mesmo pacote da classe na qual eles foram declarados. A Figura 95 faz um resumo dos modificadores acima. Tema 4 Linguagens Orientadas a Objetos 173 Figura 95. Modificadores de acesso Fonte: DEVMEDIA. Modificadores de acesso. Disponível em: <http://www.devmedia.com.br/ modificadores-de-acesso-do-java/25404>. Acesso em: 15. Jul. 2016 Juntamente com os modificadores de acesso, existe outro con- ceito que pode ser utilizado na orientação a objetos que permite que você não instancie diretamente uma classe. Mas porque criar uma classe e não criar um objeto?! Veremos abaixo o conceito de classe abstrata. CLASSE ABSTRATA Vamos pensar no exemplo já ilustrado, quando temos uma clas- se “PESSOA” com subclasses “ALUNO” e “PROFESSOR”. Se no seu universo computacional só existem duas entidades que devem intera- gir (o “ALUNO” e o “PROFESSOR”), existe sentido em criar um objeto “PESSOA”? Pensando nisso, e com intuito de eliminar a possibilidade da criação de um objeto indesejado no seu programa, surgiu o conceito de classe abstrata. A classe abstrata não possibilita sua instanciação. Observe a mudança que iremos fazer na Figura 96. 174 Linguagem deProgramação Figura 96. Classe abstrata abstract class Pessoa { //Atributos da Classe //Métodos } class Aluno extends Pessoa { //Atributos da Classe //Métodos } class Professor extends Pessoa { //Atributos da Classe //Métodos } Fonte: Autoria própria As implementações das classes foram removidas para facilitar o entendimento. Utilizando a palavra reservada “abstract” a classe é definida como abstrata. Todos os atributos e métodos são herdados às classes filhas, mas ao tentar criar um objeto, por exemplo “Pessoa p = new Pessoa();”, o programa não irá compilar. A única forma de ins- tanciar um objeto é através das suas subclasses. Tema 4 Linguagens Orientadas a Objetos 175 MÉTODO ABSTRATO Os métodos abstratos permitem que o programador declare um método em uma superclasse sem nenhuma implementação e esse, obri- gatoriamente, deverá ser implementado em uma subclasse que o herde. Vamos utilizar outro exemplo já citado para entendermos o mé- todo abstrato. A Figura 97 retoma a implementação da classe “Animal” e suas subclasses com o conceito de classe abstrata e método abstrato. Figura 97. Método abstrato abstract class Animal { //Métodos public abstract void qualOsom(); } class Gato extends Animal{ //Métodos public void qualOsom() { System.out.println(“MIAU”); } } class Cachorro extends Animal{ //Métodos public void qualOsom() { System.out.println(“AUAU”); } } class Galinha extends Animal{ //Métodos public void qualOsom() { 176 Linguagem deProgramação System.out.println(“COCOCO”); } } } Fonte: Autoria própria O método “qualOsom();” da classe “Animal” é declarada como abstract, forçando que cada subclasse que a estender implemente o seu próprio método “qualOsom()”. Observe que não há sentido em im- plementar um método que retorne um som para um animal que você não sabe qual é! Por isso, você deixa a cargo das classes que estende- rem a classe pai essa tarefa. O gato sabe que o som que deve fazer é “MIAU”, o cachorro “AUAU”, e assim por diante. INTERFACES Entendido o conceito de classes e métodos abstratos, fica sim- ples entender o que são interfaces. As interfaces são um tipo de classe abstrata com todos os métodos abstratos. Em uma interface os métodos não são implementados e são abstratos e públicos. Uma classe pode implementar mais de uma interface e não podem conter construtores. A palavra reservada utilizada para criar uma interface é “inter- face” e para implementá-la em uma classe, utiliza-se “implements”, conforme apresentado no exemplo da Figura 98. Tema 4 Linguagens Orientadas a Objetos 177 Figura 98. Interfaces interface Animal { public void comer(); } class Lobo implements Animal { @Override public void comer() { System.out.println(“Eu me alimento como um lobo!”); } } class Peixe implements Animal { @Override public void comer() { System.out.println(“Eu me alimento como um peixe!”); } } public class Teste { public static void main(String[] args) { Animal a = new Lobo(); Animal b = new Peixe(); a.comer(); b.comer(); } } Fonte: Disponível em: http://www.rafaeltoledo.net/classes-e-metodos-abstratos. Acesso em: 15. Jul. 2016. 178 Linguagem deProgramação Vamos aos pontos importantes da implementação acima: 1. Foi criada uma interface “Animal”. O pensamento é o mesmo de uma classe abstrata; 2. Foi declarado um método “comer()”. O pensamento é o mes- mo de um método abstrato;3. Duas classes foram criadas: “Lobo” e “Peixe”. Essas classes implementam a interface “Animal”; 4. Foram instanciados dois objetos na classe principal (main) do tipo “Animal” lobo e do tipo “Animal” Peixe. E, com os conceitos aqui aprendidos, podemos fechar o contéu- do com a certeza que os pontos mais importantes da orientação a ob- jeto foram abordados. No próximo conteúdo, iremos fechar este tema enriquecendo o seu conhecimento através de exemplos utilizando os principais conceitos trabalhados em outras linguagens orientadas a objetos. LEITURA COMPLEMENTAR ORACLE JAVA. Interfaces. Disponível em: < https://docs.oracle. com/javase/tutorial/java/IandI/createinterface.html>. Acesso em 12. Jul. 2016. Confira no link acima o material do mantenedor oficial da linguagem JAVA falando sobre as interfaces. O material é um tutorial de como utilizar essa estrutura desde exemplos de definição de uma interface até questões de fixação e exercícios que ajudarão a aprimorar o enten- dimento da mesma. Tema 4 Linguagens Orientadas a Objetos 179 MICROSOFT. Modificadores de acesso (Referência de C#). Di- sponível em: < https://msdn.microsoft.com/pt-br/library/wx- h6fsc7.aspx>. Acesso em: 12. Jul. 2016. O link é uma referência que trata de modificadores de acesso em C#. O C# é uma linguagem orientada a objetos mantida pela Microsoft que implementa os inúmeros conceitos trabalhados até aqui. É inte- ressante para você observar que os modificadores de visibilidade são utilizados da mesma maneira com certas diferenças em sintaxe. PARA REFLETIR Pense como seria possível implementar um software para um banco utilizando os conceitos que você aprendeu ao longo deste tema até o tópico atual. Imagine uma solução onde você tem um banco com pes- soa física e pessoa jurídica, como você aplicaria o conceito de herança nesse caso? Vá mais longe! Você seria capaz de modelar uma classe abstrata utilizando esse domínio? Vou ajudá-lo direcionando seu raciocínio... O banco tem duas entidades, como já dito. Ambas entidades podem fazer operações de saque e de- pósito. O saque da pessoa física incide um desconto maior do que a da pessoa jurídica. Já o depósito, é uma operação idêntica para ambos. Com esse pequeno texto é possível viajar nos conceitos e modelar mentalmente suas classes e seus objetos, boa viagem! 180 Linguagem deProgramação 4.4 ORIENTAÇÃO A OBJETOS, EXEMPLOS EM OUTRAS LINGUAGENS Nos tópicos anteriores demos preferência a exemplos em lin- guagem JAVA. Como o objetivo desse tema não é torná-lo um pro- gramador JAVA, mas sim prepará-lo para a compreensão dos prin- cipais conceitos da orientação a objetos, vamos conhecer como são implementados os conceitos estudados em outras linguagens desse paradigma. VB.NET Iremos trabalhar com alguns exemplos da plataforma de desen- volvimento .NET da Microsoft. A Figura 99 abaixo define uma classe em VB.NET. Figura 99. Classe em VB.NET Class Animal End Class Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#co- de-snippet-4>. Acesso em: 10. Jul. 2016 Diferente da classe que vimos em JAVA, em que toda a imple- mentação era escrita entre chaves ( “{“ e “}” ), o VB.NET utiliza as pa- lavras reservadas “Class” para iniciar uma classe e “End Class” para finalizá-la. Tema 4 Linguagens Orientadas a Objetos 181 É possível declarar atributos e suas formas de acesso, assim como vimos no JAVA. A Figura 100 ilustra a declaração de um atributo com a visibilidade pública (Public). Figura 100. Declaração de atributo público em VB.NET Class Animal Public Nome as String End Class Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#co- de-snippet-4>. Acesso em: 10. Jul. 2016 A sintaxe do VB.NET tem diversas peculiaridades em relação ao JAVA. Observe que a declaração do tipo da variável é definida utilizan- do a palavra reservada “as” acompanhada do tipo. No caso ilustrado, estamos criando uma variável “Nome” do tipo String. A Figura 101 apresenta a declaração de um método na lingua- gem em questão. Figura 101. Método em VB.NET Class Animal Public Function mudarNome(ByVal Nome As String) ‘ Desenvolvimento do método aqui… End Function End Class Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <ht- tps://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#code-s- nippet-4>. Acesso em: 10. Jul. 2016 182 Linguagem deProgramação Alguns pontos importantes: 1. Utiliza-se a palavra reservada “Function” após o modifica- dor de acesso (no exemplo foi o “Public”) para informar que será implementado um método; 2. O nome do método criado será “mudarNome” e receberá um parâmetro “Nome” do tipo String. Comentamos anterior- mente que o “as” é utilizado para definir o tipo; 3. A palavra reservada “ByVal” indica que o atributo “Nome” que será passado para o método é o valor, em string. Em C# e VB.NET há possibilidade de passar o endereço por refe- rência na memória, mas não entraremos em detalhes para não fugirmos do escopo; 4. Só por curiosidade, os comentários em VB.NET são inseridos através das aspas simples. No exemplo deixamos proposita- damente o comentário “Desenvolvimento do método aqui…”. Iremos apresentar um exemplo de utilização de construtores abaixo, observe a Figura 102. Figura 102. Construtores em VB.NET Class Animal Sub New(ByVal Nome As String) ‘ Desenvolvimento do construtor aqui… End Sub End Class Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#co- de-snippet-4>. Acesso em: 10. Jul. 2016 Linguagem e Tecnologia 183 Os construtores são sub-rotinas criadas com a palavra reserva- da “Sub” e finalizada com “End Sub”. No VB.NET se cria uma sub-roti- na quando há convicção que a tarefa será executada inúmeras vezes, ou se essa tarefa será utilizada em muitos programas. O construtor, por exemplo, será invocado toda vez que um objeto do tipo “Animal” for instanciado. Vamos agora ver como é declarado um objeto em VB.NET na Figura 103. Figura 103. Objetos em VB.NET Dim animal1 as New Animal() Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#co- de-snippet-4>. Acesso em: 10. Jul. 2016 O compilador VB.NET utiliza a palavra reservada “Dim” para de- terminar informações de variável e o tipo de dados. Em nosso exem- plo é instanciado um objeto “animal1” do tipo “Animal”. Os métodos definidos na classe, podem ser acessados da mes- ma forma vista na linguagem JAVA, utilizando o ponto (“.”) acrescido do nome do método para invoca-los. Na Figura 104 iremos invocar o método “mudarNome()” criado anteriormente. Figura 104. Invocando um método em VB.NET animal1.mudarNome() Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#co- de-snippet-4>. Acesso em: 10. Jul. 2016 184 Linguagem deProgramação Não há grande diferença na sintaxe para a invocação de um mé- todo. Iremos analisar a utilização de herança em VB.NET. A palavra reservada para herdar uma classe é “Inherits”, diferente do “extends” que conhecemos em JAVA. Não iremos ilustrar, pois a ideia é a mesma já trabalhada. Mas, como exemplo rápido, caso queira criar uma sub- classe “Cachorro” de uma superclasse “Animal”, basta declarar “Class Cachorro Inherits Animal”. Um ponto interessante do VB.NET são os modificadores utili- zados para a classe. No JAVA por exemplo, temos a ideia de classe abstrata, no VB.NET temos outras especificações. Vejamos abaixo: 1.NotInheritable: Especifica que a classe não pode ser usa- da como superclasse e, dessa forma, ninguém pode herdar dela; 2. MustInherit: Esse modificador funciona como o “abstract” do JAVA. A classe atribuído com ele pode ser herdada, en- tretanto não pode ser instanciada diretamente. C# Vamos apenas citar o C# aqui, pois é uma linguagem com a sin- taxe muito similar com o JAVA e, assim como o VB.NET, é desenvolvi- da utilizando a plataforma .NET da Microsoft. Na Figura 105 é possível observar a similaridade citada. Figura 105. Exemplo em C# class Animal { private String Nome; Linguagem e Tecnologia 185 public int mudarNome(string nome) { // Insert code here } } Fonte: MICRODOFT. Programação orientada a objeto (C# e Visual Basic). Disponível em: <https://msdn.microsoft.com/pt-br/library/dd460654.aspx?cs-save-lang=1&cs-lang=vb#co- de-snippet-4>. Acesso em: 10. Jul. 2016 No exemplo acima é criada uma classe de nome “Animal”, um atri- buto “Nome” do tipo String e um método “mudarNome” para manipular o atributo “Nome”. Perceba a similaridade com a sintaxe do JAVA. PHP: Hypertext Preprocessor O PHP é uma linguagem para o desenvolvimento de aplicações WEB. Nesse tópico escolhermos abordá-la, para deixar claro que a orientação a objetos é um paradigma e pode ser utilizado indepen- dente de plataforma, obviamente, utilizando uma linguagem que im- plemente os conceitos de orientação a objetos. Com o PHP será possível definir classes, atributos e métodos, assim como instanciar seus objetos. Vamos conferir na Figura 106. Figura 106. Classes e Métodos em PHP <?php class Usuario{ public $nome; public $cpf; 186 Linguagem e Tecnologia public $endereco; //construtor da classe function Usuario(){ $this->preparaUsuario(); } function preparaUsuario(){ $this->nome = “Octavio”; $this->cpf = “99999999999”; $this->endereco = “Rua Fulano de Tal número 0 apt 999”; } } ?> Fonte: DEVMEDIA. Introdução à Orientação a Objetos em PHP. Disponível em: <http://www.dev- media.com.br/introducao-a-orientacao-a-objetos-em-php/26762>. Acesso em: 10. Jul. 2016 O código acima define uma classe “Usuario” em PHP. Vamos aos pontos importantes do código: 1. O primeiro ponto a ser observado é que a linguagem PHP, por ser uma linguagem para programação WEB, tem seu código fonte dentro de um arquivo que pode estar mesclado com linguagem de formatação de páginas, como HTML e textos. Dessa forma, Todo bloco de programação PHP está definido entre “<?php” e “?>”; 2. As variáveis são definidas com “$” iniciando-as; 3. No PHP não é necessário definir o tipo de variável. Ela é definida no momento da atribuição. Observe no código que são definidos três atributos: $nome, $cpf e $endereco. A nenhum deles foi informado seu tipo; Linguagem e Tecnologia 187 4. A palavra reservada “function” define o método; 5. A palavra reservada “$this” faz referência a atributos e mé- todos de uma mesma classe e a atribuição e invocação é re- alizada através dos caracteres “->”; 6. O construtor “Usuario” invoca o método “preparaUsuario” através do comando “$this->preparaUsuario();”; 7. O “preparaUsuario();”, ao ser invocado, atribui às variáveis “$nome”, “$cpf” e “$endereco”, respectivamente, os valores: “Octavio”, “99999999999” e “Rua Fulano de Tal número 0 apt 999”. No exemplo ilustrado todos os objetos criados serão iniciados com os valores definidos no método “preparaUsuario()”. Para testar a classe, vamos ao exemplo da Figura 107. Figura 107. Testando a classe <?php require_once ‘usuario.php’; $usuario = new Usuario(); echo $usuario->nome; echo “<br>”; echo $usuario->cpf; echo “<br>”; echo $usuario->endereco; ?> Fonte: DEVMEDIA. Introdução à Orientação a Objetos em PHP. Disponível em: <http://www.dev- media.com.br/introducao-a-orientacao-a-objetos-em-php/26762>. Acesso em: 10. Jul. 2016 188 Linguagem deProgramação Para testar a classe “Usuario” foi criado outro arquivo. Alguns pontos que merecem ser observados: 1. A palavra reservada “require_once” é utilizada para anexar um código externo. Nesse caso, a classe desenvolvida ante- riormente foi salva em outro arquivo de nome “usuário.php”. Esse arquivo é requerido para que seja possível instanciar um objeto dessa classe; 2. É criada outra variável de nome “$usuario” que será um ob- jeto do tipo usuário, criado e atribuído através da palavra reservada “new” acrescido do nome da classe; 3. A palavra reservada “echo” do PHP imprime na tela um tex- to. No exemplo, será responsável por imprimir o nome, en- dereço e cpf; 4. A palavra “<BR>” faz parte de uma instrução de formatação de páginas WEB. Informa que é necessário pular uma linha antes de exibir a próxima informação. Em nosso último exemplo, veremos como aplicar o conceito de herança com o PHP. Veja o exemplo da Figura 108. Figura 108. Herança em PHP require_once ‘usuario.php’; class Assistente extends Usuario{ private $ramal; function Assistente (){ parent::Usuário(); $this->ramal = ‘099’; } Tema 4 Linguagens Orientadas a Objetos 189 public function getRamal(){ return $this->ramal; } } Fonte: DEVMEDIA. Introdução à Orientação a Objetos em PHP. Disponível em: <http://www.dev- media.com.br/introducao-a-orientacao-a-objetos-em-php/26762>. Acesso em: 10. Jul. 2016 Assim como no exemplo anterior, foi utilizada a palavra reser- vada “require_once” para anexar o arquivo “usuário.php” que possui a classe “Usuario”. Vejamos os detalhes do código acima: 1. É criada uma classe “Assistente”; 2. A palavra “extends” é utilizada para estender da classe “Usuario”, tornando a classe “Assistente” uma subclasse que herda de “Usuario”; 3. É criado um atributo “$ramal”, ou seja, assistente, além dos atributos e métodos da classe “Usuario”, contará também com esse novo atributo; 4. A subclasse “Assistente” conta com um construtor que, além de atribuir o valor do “$ramal” a 099, invoca o cons- trutor da classe pai através da palavra reservada “parent”, acrescido de “::”, e, seguido do nome da classe pai. Veja que interessante essa técnica! 5. Um método “getRamal()” foi criado apenas para retornar o valor do “$ramal. 190 Linguagem deProgramação Nesse conteúdo conhecemos outras linguagens de programa- ção orientadas a objetos e como os conceitos são implementados na prática. Isso dá uma visão ampla e clara sobre esse paradigma bastan- te utilizado no meio acadêmico e no mercado de trabalho. LEITURA COMPLEMENTAR DEVMEDIA. Introdução ao PHP. Disponível em < http://www. devmedia.com.br/introducao-ao-php/32540>. Acesso em: 12.Jul.2016. O artigo acima traz dicas e apresenta um resumo geral de alguns dos principais pontos sobre a linguagem PHP. Indicamos a leitura, pois o PHP é uma linguagem amplamente difundida no mercado. Um algo- ritmo em linguagem PHP pode ser desenvolvido sem utilizar os con- ceitos de programação orientada a objeto, portanto, também é uma linguagem interessante para quem quer começar a desenvolver apli- cações para a WEB. MICROSOFT. Guia de Programação em C#. Disponível em: < ht- tps://msdn.microsoft.com/pt-br/library/67ef8sbd.aspx>. Acesso em: 12.Jul.2016. A Microsoft disponibiliza um guia completo para desenvolvimento das linguagens de programação da plataforma .NET. O guia acima é uma fonte de conhecimento da linguagem orientada a objetos C#. Vale a pena a leitura para quem tem interesse em conhecer as peculiaridades dessa linguagem. Tema 4 Linguagens Orientadas a Objetos 191 PARA REFLETIR Neste conteúdo vimos algumas das diversas linguagens orientadas a objetos existentes e suas peculiaridades. Grande maioria das estrutu- ras é comum em todas as linguagens dentro do paradigma estudado. Imagine um ambiente conhecido para você, como sua casa, trabalho ou faculdade, pense nas entidades existentes e seus relacionamentos. Como você poderia transportá-las para um mundo computacional? Reflita sobre os as dificuldades que você possivelmente encontraráe de que forma elas podem ser contornadas. RESUMO Neste tema descobrimos o paradigma orientado a objetos. Conhece- mos seus principais conceitos como Abstração, que é a capacidade de modelar computacionalmente apenas o que realmente é necessário; Encapsulamento, como a habilidade de esconder a implementação e deixar exposto apenas o que deve ser utilizada pelo programador; herança, que é uma maneira de aproveitar o código já desenvolvido e evitar reescrita; e o polimorfismo, que possibilita uma resposta dife- rente para uma mesma chamada de método. Aprofundamos o conhecimento ao tratarmos de Construtores, que são tipos especiais de métodos utilizados na instanciação de um ob- jeto; Modificadores de Acesso, que alteram a visibilidade das classes, métodos e atributos; Classe Abstrata, como uma classe que não pode ser instanciada; Método Abstrato, que é um método que é apenas as- sinado na classe e deve ser implementado nas subclasses; e Interfa- ces, uma forma diferente de classe que possui apenas as assinaturas dos métodos. 192 Linguagem deProgramação Vimos ainda, que todos os exemplos foram apresentados na lingua- gem JAVA, tal linguagem é tipicamente orientada a objetos. Porém, no último tópico, pudemos apresentar outras linguagens que utilizam o mesmo paradigma, são elas: VB.NET, C# e PHP. Referências BARNES, David J. Programação orientada a objetos com Java: Uma introdução prática Utilizando o Blue J. São Paulo: Pearson Prentice Hall, 2004. PRESSMAN, Roger S. Engenharia de software. 6.ed. Porto Alegre: Bookman, 2006. SEBESTA, Robert W. Conceitos de Linguagem de Programação. 4.ed. Porto Alegre: Bookman, 2000. SEBESTA, R. W. Conceitos de linguagens de programação. 9. ed. Por- to Alegre: Bookman, 2011. SOMMERVILLE, Ian. Engenharia de Software. 7.ed. São Paulo. Pear- son Addison-Wesley, 2003.
Compartilhar