Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 30, 2022 03:58 pm GMT

Programao Orientada Objetos e Programao Procedural qual a diferena?

Em algum momento na nossa carreira de desenvolvedor(a) topamos com assunto de paradigmas de linguagens de programao. E como sempre interessante entendermos mais sobre as vantagens que uma linguagem pode nos trazer, entender a diferena e as vantagens dos paradigmas pode nos ajudar a entender tambm mais sobre certas linguagens, e foi pensando nisso que resolvi escrever esse post explicando a diferena e trazendo alguns exemplos prticos de dois paradigmas, procedural e orientado objetos.

Programao orientada a objetos

A Programao orientada objetos (POO) se baseia na ideia de que tudo so classes e objetos, as classes so como agrupadores e objetos so os participantes desses grupos. Cada classe define atributos e mtodos que so comuns a todos pertencentes a esta classe, nesse caso a cada objeto que seja uma instncia da classe. Os objetos podem possuir um atributo que seja IGUAL a todos pertencentes a classe, que so chamados de atributos da classe, ou atributos que apesar de definirem a mesma coisa no possuem o mesmo valor, chamados de atributos do objeto (como por exemplo o nome, toda pessoa possui um nome, mas no obrigatoriamente toda pessoa possui o mesmo nome). Os mtodos so abstraes para esconder o interno dos objetos, expondo apenas as funes que operam tais seus dados.
Outro conceito muito importante no mundo de POO, o de polimorfismo, que simplificando o princpio de que classes derivadas de uma mesma superclasse (classe me) expoem mtodos que tem a mesma identificao porm com implementaes diferentes, pois cada classe possui sua singularidade e por isso comportamentos distintos para realizar a mesma ao. Exemplificando: imaginamos a superclasse VeiculoDeLomocoo, ela define que todas suas derividas devem possuir o mtodo limpar, a classe derivada Carro implementa o mtodo limpar como passar lava-jato e cera em todo carro, j a classe Bicicleta implementa limpar como apenas passar uma mangueira. Entrentanto, esse comportamento interno no importa pra quem v a classe de fora.

Programao Procedural

Por outro lado, a Programao Procedural (PC) ou tambm chamada como Programao Estruturada se resume a modularizar instrues da execucao do programa em procedimentos. Os procedimentos contm um conjunto de passos computacionais a serem executados. Um dado procedimento pode ser chamado a qualquer hora durante a execuo de um programa, inclusive por outros procedimentos ou por si mesmo. Os procedimentos podem receber parmetros para realizar manipulaes e podem ou no retornar valores, e diferente de conceitos da programao funcional, procedimentos tambm podem causar efeitos colaterais como os mtodos dos objetos.
Ento simplificando vrios conceitos a diferena entre uma funo e um procedimento de que uma funo sempre retorna algum valor e no modifica nenhum parmetro fora de seu escopo, j os procedimentos podem modificar algo fora de seu escopo e no necessariamente retornam algum 'valor. Essa alterao de dados de fora de seu escopo que so os chamados de efeitos colaterais.

Na prtica

No livro Clean Code do Uncle Bob, no captulo acerca de Estrutura de Dados e Objetos ele menciona um exemplo muito claro sobre a diferena desses dois paradigmas, ento resolvi trazer o mesmo exemplo nesse post para analisarmos a implementao do mesmo programa nos dois paradigmas e compararmos suas diferenas.

Imagine o seguinte cenrio, precisamos calcular a rea de algumas formas geomtricas, cada uma possui uma frmula diferente para o clculo de sua rea.

Em POO a implementao aconteceria mais ou menos da seguinte forma

Consideramos Shape como sendo uma interface que define o contrato para que uma forma seja uma forma geomtrica

public class Square implements Shape {    private double sideValue;    //construtor    public double area() {        return sideValue*sideValue;    }}public class Rectangle implements Shape {    private double heigth;    private double width;    //construtor    public double area() {        return width* heigth;    }}

Se quissemos calcular a rea de qualquer uma dessas formas, bastaria:

public double squareAreaValue = new Square(4);

J em PC a implementao seria diferente:

public class Square {    public double sideValue;}public class Rectangle {    public double heigth;    public double width;}public class Geometry{    public double area(Object shape) throws NoSuchShapeException{        if (shape instanceof Square) {            Square s = (Square)shape;            return s.sideValue* s.sideValue;        }        else if (shape instanceof Rectangle ) {            Rectangle r = (Rectangle )shape;            return r.width* r.heigth;        }        else            throw new NoSuchShapeException();    }}

Se quissemos calcular a rea de uma dessas formas no ltimo exemplo fariamos o seguinte:

public Square square = new Square();square.sideValue = 4;public Geometry geometryCalc = new Geometry();public double squareAreaValue = geometryCalc.area(square);

Comparando:

Uma das maiores diferenas na minha opnio a forma em que os dados so manipulados, note que no exemplo de POO no temos acesso direto aos valores dos objetos e nem mesmo sabemos como os valores so utilizados para o clculo da rea, pois os objetos expem apenas o mtodo necessrio para obter a rea da forma geomtrica.
J no exemplo de PC percebemos os valores como uma estrutura de dados, e segundo Uncle Bob

As estruturas de dados expem seus dados e no possuem funes significativas para a sua manipulao.

Mas ns conseguimos manipular diretamente esses valores e realizar implementao que desejamos com eles.

Outra diferena, tambm citada em Clean Code que a facilidade e a dificuldade de implementao so invertidas em cada um dos paradigmas. Como assim? Note que ao usar as estruturas de dados em PC, podemos adicionar novos procedimentos facilmente, por que precisamos alterar apenas um local, porm para adicionar uma nova estrutura de dados teriamos que alterar todos os procedimentos que as utilizam - imagine se tivessemos um procedimento para calculo da rea, outro para perimetro, outro para mediatrix, todos teriam que ser alterados para prever essa nova forma geomtrica.
Mas em POO temos o contrrio, para adicionar um novo mtodo seria mais trabalhoso por que teriamos que alterar todas as classes de formas geomtrica para implementar esse novo mdodo, j para adicionar uma nova classe (uma nova forma geomtrica) precisariamos alterar apenas um local, que seria criando a nova classe seguindo a interface Shape.

Alm disso, mesmo com os exemplos estando na mesma linguagem, notamos que cada um faz o uso dos recursos da linguagem de maneira diferente.


Original Link: https://dev.to/fernandakipper/programacao-orientada-objetos-e-programacao-procedural-qual-a-diferenca-22lj

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To