Segundo porque, sim, a programaГ§ГЈo orientada a objetos Г© bem complicada no inГcio mesmo. Existem muitos conceitos essenciais nesse paradigma que se nГЈo forem bem compreendidos, nГЈo vГЈo te deixar ir adiante.
No prГіximo post darei sequГЄncia na definiГ§ГЈo desses conceitos e em como a OrientaГ§ГЈo a Objetos auxilia a rotina do programador. Quer ficar sabendo quando o novo artigo serГЎ postado?
Seu carro Г© um objeto seu mas na loja onde vocГЄ o comprou existiam vГЎrios outros, muito similares, com quatro rodas, volante, cГўmbio, retrovisores, farГіis, dentre outras partes. Observe que, apesar do seu carro ser Гєnico (por exemplo, possui um registro Гєnico no Departamento de TrГўnsito), podem existir outros com exatamente os mesmos atributos, ou parecidos, ou mesmo totalmente diferentes, mas que ainda sГЈo considerados carros. Podemos dizer entГЈo que seu objeto pode ser classificado (isto Г©, seu objeto pertence Г uma classe) como um carro, e que seu carro nada mais Г© que uma instГўncia dessa classe chamada "carro".
No desenvolvimento de sistemas tratamos a orientaпїЅпїЅo a objetos como um paradigma de programaпїЅпїЅo, ou seja, como uma forma de se implementar um cпїЅdigo. No entanto, este пїЅ um tema com aplicaпїЅпїЅo em diversas пїЅreas e por este motivo as literaturas sobre o assunto podem apresentar definiпїЅпїЅes пїЅs vezes divergentes. Devido ao nosso escopo, obviamente, neste artigo vamos tratar da orientaпїЅпїЅo a objetos direcionada ao desenvolvimento de software e, portanto, a estudaremos como: um conceito da engenharia de software no qual os elementos de uma soluпїЅпїЅo sпїЅo representados como objetos.
Quando duas (ou mais) classes possuem comportamentos comuns que podem ser separados em uma outra classe, dizemos que a "classe comum" Г© uma interface, que pode ser "herdada" pelas outras classes. Note que colocamos a interface como "classe comum", que pode ser "herdada" (com aspas), porque uma interface nГЈo Г© exatamente um classe, mas sim um conjunto de mГ©todos que todas as classes que herdarem dela devem possuir (implementar) - portanto, uma interface nГЈo Г© "herdada" por uma classe, mas sim implementada. No mundo do desenvolvimento de software, dizemos que uma interface Г© um "contrato": uma classe que implementa uma interface deve fornecer uma implementaГ§ГЈo a todos os mГ©todos que a interface define, e em compensaГ§ГЈo, a classe implementadora pode dizer que ela Г© do tipo da interface. No nosso exemplo, "carro" e "motocicleta" sГЈo classes que implementam os mГ©todos da interface "automГіvel", logo podemos dizer que qualquer objeto dessas duas primeiras classes, como um Honda Fit ou uma motocicleta da Yamaha, sГЈo automГіveis.
Essa ideia se mantГ©m atГ© hoje porГ©m, sabemos que nem sempre tentar assemelhar Г realidade Г© a melhor soluГ§ГЈo. Utilizando OrientaГ§ГЈo a Objetos, o programador consegue moldar diversos objetos e definir como esses objetos devem interagir entre si. Existe uma conversa entre todos os objetos de sua aplicaГ§ГЈo atravГ©s de mensagens sendo que as mensagens sГЈo responsabilidade do programador. Ele deve “dizer e saber” quais devem ser enviadas e para onde devem ir.
Repare que apesar de serem objetos diferentes, moto e carro possuem os mesmos mГ©todos acelerar e acenderFarol, que sГЈo chamados da mesma forma, apesar de serem implementados de maneira diferente.
Mas entГЈo, como sabemos como o nosso carro acelera? Г‰ simples: nГЈo sabemos. NГіs sГі sabemos que para acelerar, devemos pisar no acelerador e de resto o objeto sabe como executar essa aГ§ГЈo sem expor como o faz. Dizemos que a aceleraГ§ГЈo do carro estГЎ encapsulada, pois sabemos o que ele vai fazer ao executarmos esse mГ©todo, mas nГЈo sabemos como - e na verdade, nГЈo importa para o programa como o objeto o faz, sГі que ele o faГ§a.
Quando falamos de programaГ§ГЈo orientada a objetos ou apenas POO as primeiras coisas pensamos Г©: Objetos, classes, atributos ou propriedades e mГ©todos. Mas o que quer dizer cada um desses nomes?
A evoluГ§ГЈo natural do paradigma veio com as necessidades. Em um dos trabalhando de simulaГ§Гµes que lidavam com explosГµes de navios, Nygaard e Dahl perceberam que poderiam agrupar os navios em diferentes categorias. Cada tipo de navio teria sua prГіpria classe e da classe geraria seus dados e comportamento Гєnico.
A criaпїЅпїЅo da notaпїЅпїЅo UML teve inпїЅcio em outubro de 1994, quando Rumbaugh se juntou a Booch na Rational Software Corporation. Nesta пїЅpoca o constante crescimento da Rational fez com que surgisse a necessidade de organizar e definir as etapas de desenvolvimento adotadas em seus projetos. Foi concebido, assim, o processo de desenvolvimento unificado, denominado RUP (Rational Unified Process). Contudo, como os sistemas implementados por outras empresas careciam de um processo mais formal e definido, logo o mercado tambпїЅm abraпїЅou o RUP.
Mas uma vez entendidos, vocГЄ vai desenvolver a base teГіrica essencial que todo programador precisa para programar em suas linguagens preferidas. Falando nisso, vocГЄ tem uma linguagem preferida?
A primeira coisa que devemos saber Г© que nem toda linguagem Г© orientada a objetos e ainda, nem toda linguagem Г© totalmente orientada a objetos. Existem algumas que possuem traГ§os da OrientaГ§ГЈo a Objetos mas nГЈo trabalham inteiramente e existem outras que nГЈo aplicam ou dГЈo suporte a diversos tipos de paradigmas.
Nesse contexto, para representar os elementos identificados durante a anпїЅlise de um sistema que segue esse paradigma, пїЅ necessпїЅrio conhecermos um pouco sobre modelagem, de modo que saibamos como construir, de forma visual, os componentes da soluпїЅпїЅo atravпїЅs de notaпїЅпїЅes e diagramas padronizados.
Se vocГЄ estГЎ interessado em desenvolvimento de aplicativos mГіveis, provavelmente jГЎ ouviu falar de Flutter. Desenvolvido pelo Google, o Flutter Г© um framework de cГіdigo aberto que permite a criaГ§ГЈo de aplicativos nativos para Android e iOS a partir de …
Segundo o livro OrientaГ§ГЈo a Objetos de Thiago Leite e Carvalho (2016), um algoritmo deve ser o mais genГ©rico possГvel, para assim ser implementado com facilidade em qualquer linguagem de programaГ§ГЈo.
Alguns problemas aparecem com tanta frequГЄncia em POO que suas soluГ§Гµes se tornaram padrГµes de design de sistemas e modelagem de cГіdigo orientado a objeto, a fim de resolvГЄ-los. Esses padrГµes de projeto, (ou design patterns) nada mais sГЈo do que formas padronizadas de resolver problemas comuns em linguagens orientadas a objetos. O livro "Design Patterns", conhecido como Gof:Gang of Four, Г© a principal referГЄncia nesse assunto, contendo os principais padrГµes usados em grandes projetos. A Alura tambГ©m oferece cursos de Design Patterns em linguagens de programaГ§ГЈo como Java, Python e C#.
Nota: criar um erro do tipo NotImplementedError Г© apenas uma conveГ§ГЈo para que, caso uma classe filha tente executar um mГ©todo da classe mГЈe sem tГЄ-la implementado, ocorra o erro. Em Python, as interfaces sГЈo criadas como classes normais que sГЈo herdadas pelas classes filhas. Existem formas de forГ§ar a implementaГ§ГЈo por parte das classes filhas, mas para nosso exemplo essa abordagem Г© suficiente.
Como afirma Thiago Leite e Carvalho (2016), algumas de nossas IDE’s, como NetBeans, Eclipse e Visual Studio sofreram influências do ambiente de desenvolvimento da SmallTalk-80.
Resumindo, o paradigma estruturado costuma agrupar o seu cГіdigo. Com isso, o “passo a passo” Г© centralizado e desenvolvido em um mesmo lugar.
Dependendo do ponto de vista, a origem da “orientaГ§ГЈo a objetos” pode ser bastante discutida. Esta resposta Г© baseada nas colocaГ§Гµes da pergunta que pede um enfoque nos fatos histГіricos, resoluГ§ГЈo e abstraГ§ГЈo de um determinado problema, e ainda os benefГcios deste paradigma na programaГ§ГЈo.
A propГіsito, SimulaГ§ГЈo de Eventos Discretos ou Discrete Events Simulation Г© um dos modelos matemГЎticos usados para descrever como o computador compreende a lГіgica dos eventos diГЎrios.
Quando dizemos que uma classe A Г© um tipo de classe B, dizemos que a classe A herda as caracterГsticas da classe B e que a classe B Г© mГЈe da classe A, estabelecendo entГЈo uma relaГ§ГЈo de heranГ§a entre elas. No caso do carro, dizemos entГЈo que um Honda Fit "Cross" Г© um tipo de Honda Fit, e o que muda sГЈo alguns atributos (paralama reforГ§ado, altura da suspensГЈo etc), e um dos mГ©todos da classe (acelerar, pois agora hГЎ traГ§ГЈo nas quatro rodas), mas todo o resto permanece o mesmo, e o novo modelo recebe os mesmos atributos e mГ©todos do modelo clГЎssico.
Encapsulamento, heranГ§a e polimorfismo: as principais caracterГsticas da POO. As duas bases da POO sГЈo os conceitos de classe e objeto. Desses conceitos, derivam alguns outros conceitos extremamente importantes ao paradigma, que nГЈo sГі o definem como sГЈo as soluГ§Гµes de alguns problemas da programaГ§ГЈo estruturada.
Em orientaГ§ГЈo a objetos, uma classe Г© uma descriГ§ГЈo que abstrai um conjunto de objetos com caracterГsticas similares. Mais formalmente, Г© um conceito que encapsula abstraГ§Гµes de dados e procedimentos que descrevem o conteГєdo e o comportamento de entidades do mundo real, representadas por objetos.
Uma definiГ§ГЈo de classe Г© basicamente uma definiГ§ГЈo de um tipo de dado. Uma classe contГ©m um conjunto de bits representando um estado e um conjunto de operaГ§Гµes que permitem modificar o estado.
Classe social Г© um conceito da Sociologia que se refere Г divisГЈo socioeconГґmica do mundo em um sistema capitalista. HГЎ uma hierarquia de grupos sociais, as classes, que possuem diferentes importГўncias e ocupam diferentes cargos dentro da divisГЈo social do trabalho.