Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CleitonGarcia

Estruturado vs OO

Recommended Posts

Você aprendeu sobre tudo isso em 20 minutos?

 

Clararamente que não. Eu estou em 60% do curso de lógica OO, somente a lógica. Fui bem nas provas até agora, (90% em 2 provas). Solicitei material físico para aprendizado também, chega em alguns dias. Mas isso ainda é somente teoria, mas sim, já entendi como funcionam tudo isso, como funciona a hierárquia, polimorfismo, classes, metódos, subclasses, superclasses, etc. Já entendi como eles funcionam e quais suas funções em um código OO. Mas ainda não coloquei em prática isso, é apenas teoria.

 

 

Amigo, recém comecei a estudar, acalme-se! Haha. clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Digamos que você gere o template na classe BASE

class base {
   function __construct() {
       ?>
       <!DOCTYPE html>
       <html>
           <head></head>
           <body>
               <div class="header"><?php $this->header(); ?></div>
               <div class="content"><?php $this->content(); ?></div>
               <div class="footer"><?php $this->footer(); ?></div>
           </head>
       </html>
       <?
   }

   function header() {
       echo 'HEADER';
   }

   function content() {
       echo 'CONTENT';
   }

   function footer() {
       echo 'FOOTER';
   }
}

Nesse exemplo, mesmo que haja uma classe-pai aqui desconsiderada, a implementação correta, para evitar dummy bodies e métodos públicos abstratos, seria utilizando Interfaces:

 

 

interface Template {

   public function header();

   public function footer();
}

class ContactForm implements Template {

   public function header() {
       echo 'Contact form Header';
   }

   public function footer() {

       echo 'Contact Form Footer';
   }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nesse exemplo, mesmo que haja uma classe-pai aqui desconsiderada, a implementação correta, para evitar dummy bodies e métodos públicos abstratos, seria utilizando Interfaces:

 

 

interface Template {

   public function header();

   public function footer();
}

class ContactForm implements Template {

   public function header() {
       echo 'Contact form Header';
   }

   public function footer() {

       echo 'Contact Form Footer';
   }
}

 

 

Como eu disse é um exemplo MUITO simples, e acho que se ele está aprendendo OO, provavelmente ainda nem chegou em INTERFACES, e se chegou aparentemente não teve nem tempo de entender o básico, para ai então entender o porque de utilizar interfaces.

 

Eu poderia até ter usado traits, que foi implementado agora no php 5.4, que extende a herança horizontalmente, mais como ele mesmo falou que ainda está estudando a metodologia, com o código que eu exibi, acredito que ele possa evoluir sozinho, realizando testes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente, minha sincera opinião é:

sim, a programação OO é um pouco mais... "organizada", contextualizada e até mesmo pelo paradigma, que usa classes, induz ao programador "um pouco mais de organização".

 

Entretanto, depende muito de como é feito o projeto do código. Não adianta o paradigma induzir a organização se o cara não tiver uma metodologia padrão para programar. O que "queimou" a programação estruturada foi a falta de organização na hora de programar, isso pode acontecer na linguagem que for, exemplo: em PHP tem uma página "index.php" e o cara mistura código com o HTML, scripts de banco de dados, css, javascript e etc ... . Aí nem digo que o paradigma usado nem é o estruturado, como um professor meu disse "isso já é lambança", pois a programação estruturada usa funções e não precisa colocar variáveis globais, apenas parametros. Nesse mesmo exemplo se em uma página "index.php", ser apenas o HTML e ter uma página aparte só com as funções, por exemplo, funções.php e lá ter as funções que acessam o banco e as demais funções... será sim um sistema bem performático. Que estou querendo dizer é: Lógico que o paradigma ajuda, porém, de nada vai adiantar se programador não tem um bom padrão de programação.

 

Tanto que que uns 15 anos atrás, a programação estruturada reinava; grandes sistemas, tais como siape, siafe e alguns da caixa e do BB estão ainda em paradigma estruturado, pois usam cobol, e até onde sei ainda não tem a versão OO para o cobol e nem o natural(linguagem de mainframe). Se forem procurar por análise estruturada no google, vai encontrar muio material sobre e como no OO tem seus diagramas, tais como: diagrama de contexto e o diagrama de fluxo de dados (DFD).

 

Mas uma comparação bem superficial entre os dois paradigmas:

- OO, realmente é muito organizado e trabalha com o conceito de abstração de objetos, ou seja, você tem mais liberdade para "representar" coisas do mundo real, até simplifico isso com um exemplo;

 

classe flor{

privado cor;

privado num_petalas;

//agora os metodos

publico desabrochar(){

cor = "branca";

num_petalas = 8;

}

}

Na OO foi fácil "representar uma flor", já que aí você pode definir atributos e métodos.

 

Já no paradigma estruturado, representar uma flor não seria tão fácil, pra mim em minha humilde opinião, diria até que é quase impossível, mas por quê?! pelo pelo fato do paradigma estruturado ser mais focado em estrutura de dados e seu respectivo processamento. talvez se eu tentasse em programação estruturada... vamos tentar:

array flor ("cheiro" => "bom", "num_petalas" => "8", "cor" => "rosa");

funcao criar_flor(flor){

//decompor array usando um foreach e após atribur os dados e usar-los da forma que achar conveniente

}

 

Deram pra entender a diferença?!

 

e saliento, o que queimou a programação estruturada, em especial, em php, foi essa mistureba de codigo em uma página.

 

Espero ter ajudado :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, pra você aprender a programar OO , você tem que saber Estruturado , essa é minha opinião.

Porém , depois que você aprendeu , estude muito OO , e programe em OO , até pequenos programas.

Um sistema OO, facilita e muita para manutenção, a organização é perfeita, então quando outra pessoa ler seu código fica mais fácil ela saber o que está sendo feito.

Eu já aprendi estruturado e agora vou estudar muito Orientação a Objetos, apesar de estou sem tempo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não li toda a discussão, mas vou dar uns pitacos aqui.

 

Mito #1: Programação estruturada/procedural é coisa de amadores

Então os desenvolvedores do kernel do Linux e do Windows são TODOS amadores.

 

Mito #2: Programação estruturada/procedural só se aplica a pequenos projetos

Volto no kernel do Linux. Provavelmente é maior do que TODOS os projetos juntos que a maioria aqui já desenvolveu até hoje.

:seta: http://linuxator.wordpress.com/2008/07/22/5-things-you-didnt-know-about-linux-kernel-code-metrics/

 

Mito #3: POO é programar utilizando classes e herança

Esse é um graaaande mito. Muita gente fala que basta desenvolver em Java pra aprender OO.

Estão redondamente enganados. OO é muito mais do que sair distribuindo classes e métodos por arquivos.

90% dos códigos Java que eu vejo por aí são essencialmente procedurais, são orientados a classes, não a objetos.

 

Em suma, é meio verdade o que falaram aí, POO é essencialmente programação estruturada/procedural, tanto que ambas fazem parte do mesmo paradigma de programação: o imperativo.

O que muda é a disposição e a interação entre os blocos de código, que é ampliada pelos objetos.

 

Notem que, à medida que o tempo passa, as linguagens de programação tendem a se aproximar cada vez mais da linguagem humana.

 

Inicialmente, se programava em linguagem de máquina (binário), ligando e desligando válvulas, ou perfurando cartões e fitas.

Esse tipo de programação é muito difícil de ser feito porque precisamos decorar sequências de números que são muito parecidas, ou então, sempre carregar um "pequeno" guia de referência.

 

Depois, criou-se a famigerada linguagem de montagem (assembly), que simplificou a tarefa de realizar comandos, pois os mesmos ganharam mnemônicos significativos:

add EAX, 2
mov ECX, 4
mul

 

Ainda assim, a ordem das operações podia não ser muito intuitiva, fora a quantidade enorme de linhas de código para fazer operações simples. Os códigos eram repletos de saltos condicionais e incondicionais, o que tornava a tarefa de debugar muito penosa.

 

Com o advento do compilador, a primeira linguagem estruturada foi desenvolvida e ela existe até hoje: Fortran. Com linguagens estruturadas, ao menos a parte matemática (que era o foco na época) ficou mais próxima do mundo real:

x = (x + 2) * 4

 

O conceito de variável é algo muito importante na programação estruturada. Com ela, podemos dar "apelidos" a posições de memória que são fáceis de lembrar.

Se antes fazíamos:

mov 0x76502112, 2

 

Hoje fazemos:

int x = 2;

 

E em linguagens dinâmicas, nem precisamos declarar um tipo:

x = 2

 

Além disso, surgiu uma gama de estruturas (daí o nome "estruturada") que permitia saltar e iterar sobre blocos de código: if...else, while, for, do...while, switch, etc...

 

Em um certo momento, apenas essas estruturas eram insuficientes para a complexidade que os programas atingiam. Surgiram então as funções e procedimentos (daí o nome "procedural"), que nada mais são do que blocos de código reutilizáveis.

int fatorial(int n) {
if(n <= 1) return 1;
return n * fat(n - 1);
}

 

Agora pode-se calcular o fatorial de qualquer número facilmente:

int x = fatorial(4);

 

Tudo isso funcionava muito bem quando o computador era utilizado apenas no meio acadêmico-científico.

Entretanto, passou-se a querer utilizar programas que modelavam e simulavam o mundo real.

 

Se eu quisesse, por exemplo, representar uma pessoa em um programa que fazia controle de entrada e saída em uma fábrica era meio complicado.

Supondo que cada pessoa possuía um nome, um turno ao qual é associada e um identificador interno, normalmente se faria assim:

string nomes[100];
string turnos[100];
int ids[100];

 

Cada pessoa estaria associada a um índice em cada vetor. Por exemplo, a pessoa "0":

nomes[0] = "José da Silva"
turnos[0] = "Matutino"
ids[0] = 912382172

 

Desnecessário dizer a lambança que é isso. É praticamente impossível manter essa estrutura, é um trabalho descomunal.

 

Surgiu então a necessidade da criação de um conceito chamado Tipo Abstrato de Dados (TAD, ou ADT em inglês).

Tipo Abstrato de Dado (TAD) é uma especificação de um conjunto de dados e operações que podem ser executadas sobre esses dados.

 

Em algumas linguagens, é possível criar structs, que nada mais são do que uma maneira de organizar dados de diferentes naturezas em uma só estrutura.

struct Employee{   string Name   string Shift   int Id };     void Employee_registerEntrance(Employee employee); void Employee_registerExit(Employee employee);

Isso resolveu parte do problema, tanto que a maioria dos sistemas operacionais modernos utiliza esse modelo de representação.

 

Entretanto, para outros tipos de aplicação não era o suficiente. Foi então que na década de 80 se desenvolveu a tal da Orientação a Objetos.

O objetivo era apenas tornar a programação mais fácil, mais próxima ao mundo real. Algo como

Pessoa pessoa = new Pessoa();
Carro carro = new Carro();

pessoa.dirigir(carro);

 

É fácil entender o que esse código faz, mesmo para quem é leigo em programação.

 

Tudo seria muito lindo se fosse tão simples assim, mas a orientação a objetos tem muitos aspectos ardilosos, justamente para ser poderosa o suficiente para modelar o mundo real.

Programar utilizando realmente orientação a objetos é uma tarefa difícil e requer algum tempo de estudo. Isso se deve ao fato de que é necessário abstrair o mundo em que vivemos em conceitos computáveis, o que não é tão simples.

 

Resumindo tudo o que falei aqui até agora: a evolução das linguagens de programação visa aproximar o mundo real do mundo computacional.

 

A orientação a objetos é um esatágio intermediário dessa evolução, hoje em dia existem paradigmas mais "alto nível", como a orientação a aspectos, programação declarativa e as chamadas linguagens de 4ª geração (SQL é um exemplo delas, já que fazer uma consulta SQL é praticamente dizer uma frase em inglês).

 

Entretanto, como estas últimas que citei são conceitos relativamente novos, elas ainda não possuem o poderio ilimitado (ou quase) das linguagens procedurais e orientadas a objetos, por isso, estas seguem sendo as mais utilizadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que a explicação do Henrique foi a mais completa até agora.

 

Mas cara, o fato é que OO é basicamente a mesma coisa para qualquer linguagem, não existe essa de OO para Java, OO para VB, OO para ASP, existe apenas POO e ponto. Como cada linguagem especifica e nomeia cada coisa que é utilizada na Programação de Objetos é o que difere uma coisa da outra, apenas em sintaxe.

 

POO faz você escrever menos e fazer mais coisas, porém você deve prestar atenção na arquitetura dos códigos, o estruturado é um pouco mais rápido para se executado e geralmente não exibe tantos erros ou falhas, porém você escreve infinitamente mais para fazer quase as mesmas coisas, ou seja, ambos são métodos que as pessoas usam para programar, eu prefiro utilizar a programação Orientada mas também me utilizo de estruturação para fazer algumas coisas mais simples, e isso tudo na mesma aplicação. Essa é a beleza da programação cara, não há limites, você pode fazer uma mistura com tudo que existe, você só precisa saber como fazê-la.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa é a beleza da programação cara, não há limites, você pode fazer uma mistura com tudo que existe, você só precisa saber como fazê-la.

 

Cara, para mim você falou tudo nessa frase.

 

Eu sou programador a 8 anos... programei 4 em Procedural e estou a 4 em OO.. E cara para mim , você só fica do lado da procedural em se você não conhecer a beleza do OO.

 

OO é + do que classes e heranças, OO são boas práticas, código limpo é uma ARTE.

 

Meu foco mais é sites e não sistemas, eu faço 4 a 6 sites/mes.. Faço tanto o front quanto o back.

 

O POO me ajudou 300% com principalmente reaproveitamento de código.

 

Ainda mais q eu uso MVC , um projeto que levaria 10 com procedural eu demoro 2 ou 3 com OO.

´

Sem contar que o código é infinitamente mais bonito... levando em conta, que eu me baseio nas experiências que tive com programadores procedurais.

 

Pois , não generalizando + 90% dos programadores procedurais não se importam em comentar o código e nem muito se importam com a Identação do código.

 

Ele entende, e para ele isso basta...

 

Mas para mim, se você quer saber se seu código está bom , ele deve ser de fácil entendimento para qualquer um que for mexer, se só você entende seu código, é hora de rever seus conceitos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, para mim você falou tudo nessa frase.

 

Eu sou programador a 8 anos... programei 4 em Procedural e estou a 4 em OO.. E cara para mim , você só fica do lado da procedural em se você não conhecer a beleza do OO.

 

OO é + do que classes e heranças, OO são boas práticas, código limpo é uma ARTE.

 

Meu foco mais é sites e não sistemas, eu faço 4 a 6 sites/mes.. Faço tanto o front quanto o back.

 

O POO me ajudou 300% com principalmente reaproveitamento de código.

 

Ainda mais q eu uso MVC , um projeto que levaria 10 com procedural eu demoro 2 ou 3 com OO.

´

Sem contar que o código é infinitamente mais bonito... levando em conta, que eu me baseio nas experiências que tive com programadores procedurais.

 

Pois , não generalizando + 90% dos programadores procedurais não se importam em comentar o código e nem muito se importam com a Identação do código.

 

Ele entende, e para ele isso basta...

 

Mas para mim, se você quer saber se seu código está bom , ele deve ser de fácil entendimento para qualquer um que for mexer, se só você entende seu código, é hora de rever seus conceitos.

 

Então, você disse uma verdade. Que é o reaproveitamento, flexibilidade, manutenibilidade e extensividade que o OO proporciona.

 

Mas quanto à eu que programo somente com procedural (até os presentes projetos - estou mudando isso, inclusive já comecei a estudar OO, MVC, etc.) eu ao menos me importo E MUITO com a beleza do meu código. Eu deixo o mais simples possível, sempre identando PERFEITAMENTE, não misturo HTML com PHP, utilizo o padrão MVC, só que não em OO. Eu comentava até meus últimos projetos, mas comecei a precisar de tempo e deixei de comentar.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
eu ao menos me importo E MUITO com a beleza do meu código. Eu deixo o mais simples possível, sempre identando PERFEITAMENTE.

 

Quanta bobeira...

 

Eu comentava até meus últimos projetos, mas comecei a precisar de tempo e deixei de comentar.

 

O unico comentario que realmente tem utilidade é a do doc /** */

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu também sou assim. Tokens grudados, chaves em novas linhas, linhas muito compridas...

 

Quando programo faço todo o possível para que o código seja algo aprazível de ser ler.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacelos

Uma verdadeira aula ! Só tenho um pouco de medo de que as linguagens de programação fiquem tão fáceis. Se nossa área já é desvalorizada, se oferecer está facilidade, f0deu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matheus Lucca Carmos, não tenha dúvida de que isso vai acontecer um dia. Em um futuro não tão distante, programação vai ser coisa de criança.

A alternativa vai ser mudar de área, mas a Tecnologia da Informação nunca vai deixar de existir.

A diferença é que na nossa área, as coisas evoluem com uma velocidade infinitamente maior do que nas outras. Quem fica parado é engolido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Henrique Barcelos

Fala isso não cara! haha

Mas acredito que coisas também irão evoluir de modo que só quem tem o conhecimento que nós temos poderá fazer, ou terá que estudar.

Espero que assim seja !

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.