Agora estou no quarto ano em uma universidade de TI e, quando converso com meu professor sobre esse tópico, ele rejeita minha opinião e me faz uma crítica muito pesada (na minha universidade, estávamos aprendendo C (ANSI) (em Procedural Aula de programação - no 1º ano na universidade) antes de C ++ (na aula de POO no 2º ano) e outras ...
Mas, aos 13 anos, meu irmão me ensinou Java primeiro e nada mais. Agora, ele pode fazer quase tudo o que um aluno normal do segundo ano pode fazer com Java.
Para vocês profissionais, eu gostaria de saber por que você acha que devemos aprender a programação processual primeiro.
object-oriented
education
Lucas
fonte
fonte
Respostas:
Resumo rápido:
Porque no mundo real, mais cedo ou mais tarde, você precisa trabalhar com código processual.
Como as Linguagens procedurais podem funcionar como uma extensão ou uma introdução às Linguagens orientadas a objetos, em vez de apenas serem uma alternativa.
Complemento à resposta 2. Como a POO é mais complexa que a Programação Procedimental, é melhor aprender a Programação Procedimental primeiro.
Porque no mundo real, os programadores trabalham e combinam várias maneiras de resolver problemas, também conhecido como "programação multiparadigmática", e não apenas um único paradigma.
A maioria das linguagens de programação é multiparadigm, em algum nível, mesmo que seus designers ou desenvolvedores comuns digam o contrário.
[NOVO] Como a Programação Modular, geralmente misturada e confusa com a Programação Procedimental, pode ser aplicada ao OOP. Portanto, a pergunta pode ser lida como "Por que devemos aprender programação Modular antes de aprender a programação orientada a objetos"?
Descrição Aborrecida Estendida:
O ponto 1 é muito claro, sem mais explicações.
Ponto 2, Classes, Herança, Polimorfismo, Interfaces, etc.
Ponto 3, eu codifico Pascal processual antes de aprender Pascal orientado a objetos, quando cheguei lá, eu disse: "olha, as classes são como pequenos programas processuais ... ... e você pode fazê-los conversar, legal !!! "
Ouvi o mesmo de pessoas que passaram do C para o C plus plus.
Ponto 4, na maioria das vezes os programadores combinam várias técnicas ou paradigmas de programação, ou maneiras de resolver um problema. Funcional, procedural, OOP, lógico.
Mesmo o Java "Pure OO" não é tão simples quanto a programação de objetos.
+1 ponto para dizer "Programação procedural" em vez de "Programação estruturada". Ou programação modular. Isso é importante.
Embora muitas vezes esses termos sejam ensinados juntos e usados de forma intercambiável, eles não são. Programação Estruturada, inclui muitos conceitos, não apenas usando procedimentos, e um deles é fazer com que o programa não pareça com "Código de Espaguete".
Hoje eu li vários programas OO "puros" que se parecem com "Código de Espaguete Orientado a Objetos", significando que o programador usou OOP, mas seu código parece uma bagunça.
Muitas vezes, eu posso ler um código OO e dizer que o programador aprendeu a Programação Estruturada antes do OOP, porque o código é claro e organizado.
E para a Programação Modular, já vi vários aplicativos. em C ++ e PHP que não usa módulos. *
fonte
Eu pensaria que a analogia seria semelhante à matemática. Você precisa aprender alguns conceitos básicos primeiro (adição / subtração / ...) e depois passar para tópicos mais complexos (álgebra / cálculo). O programa processual é muito linear e é mais fácil entender o fluxo de controle enquanto você aprende a sintaxe. O POO talvez seja considerado mais complexo, baseia-se nas construções mais simples usadas nas linguagens processuais, mas é mais abstrato e mais difícil de entender. Começar com linguagens como C também o aproxima do hardware e ajuda a lidar com problemas de alocação de memória e ponteiros, que você precisa entender, mas não consegue usar em linguagens como Java / C #. Existe algum valor real em ser exposto a isso na escola, independentemente de ser o primeiro ou o segundo.
FWIW, está prestes a mudar eventualmente. Quando eu comecei a escola, aprendemos em Pascal e PL / 1. Não chegamos ao C até a aula de idiomas avançados (que data comigo). Eu não peguei o Java até a faculdade - ainda não havia sido inventado!
fonte
A programação orientada a objetos é uma coleção de trechos de procedimentos de maneira organizada. Acho que a lição que você está aprendendo é que a metodologia orientada a objetos ajuda a manter a organização e a capacidade de manutenção. Muitos programadores não conseguem fazer essa distinção e afirmam que seus programas são orientados a objetos quando são mais processuais.
fonte
Você não
Aprendemos a programação funcional primeiro, com o Scheme. Então nos mudamos para processual, em seguida, OOP, e , em seguida, programação declarativa. E, acredite ou não, enquanto eu já conhecia programação, acho que também foi mais fácil para outras pessoas: porque FP é como matemática! Então você já sabe o básico.
Debatei isso comigo mesmo muitas vezes e finalmente cheguei à conclusão de que realmente depende de quão bem seu professor ensina os conceitos.
Não existe uma resposta única porque:
Começar com algo processual como C (ou mesmo assembly) pode ser uma boa escolha, porque você aprende como os computadores realmente funcionam
Começar com algo orientado a objetos Java pode ser uma boa escolha, porque é relativamente fácil aprender e aplicar OOP à vida real e porque ensina a ** formar
Começar com uma programação funcional como o Scheme pode ser uma boa escolha, porque ensina a pensar de maneira mais abstrata (em termos de funções em vez de variáveis), o que, em última análise, o torna um programador melhor
Se o seu professor não ensina bem, então realmente não importa com o que você começa; eles ficarão praticamente iguais.
fonte
Uma linguagem pode ser orientada a objetos como C ++, Java ou C #. E você pode começar com esses idiomas. Mas o ponto é que, mesmo com essas linguagens OO, você precisa aprender a programação procedural primeiro e depois OOP. Eu acho que o mesmo foi feito por você para seu irmão.
fonte
=
atribuição,if
,for
, etc) em pedaços maiores (métodos), como você pode sempre esperar entender OOP. Como na maioria das habilidades, ser muito inteligente, motivado e / ou ter acesso a instruções individuais pode permitir que você aprenda vários tópicos relacionados simultaneamente.A programação processual, pelo menos em uma linguagem como C, reduz a programação a uma prática básica: algoritmos e estruturas de dados e em um nível de abstração que é um meio termo entre o código-fonte compreensível humano e o código de montagem.
Dessa forma, os alunos podem aprender um pouco de ciência (algoritmos, estruturas de dados) e um pouco de engenharia (compilação de fonte-> objeto-> máquina, arquitetura von-neuman (provável)) ao mesmo tempo.
OOP, via C ++ / obj-C, introduz um padrão de organização de código, que é apenas mais uma coisa a aprender. Isso pode dificultar o aprendizado dos conceitos acima.
OOP via Java (entre outros) vai ainda mais longe, abstraindo o hardware e o ambiente. Agora, o produto subjacente não é um código de máquina, mas algum tipo de intermediário que não revela como o hardware subjacente funciona, mas o efeito é que ele permite que o aluno se concentre nos padrões de organização do código.
No final, acho que é uma troca entre aprender como o hardware funciona ou aprender um padrão de organização de código. Quanto ao que é mais importante, eu realmente não sei. O mundo real requer conhecimento de ambos, pelo menos até certo ponto.
Suponho que um programa de graduação que comece com programação procedimental de baixo nível provavelmente produz cientistas / engenheiros de computação, e um programa que comece com conceitos de nível superior produz engenheiros / desenvolvedores / programadores de software.
fonte
As tripas dos objetos OOP são compostas de programação procedural.
Se você não pode fazer um loop for, use os ponteiros corretamente, declare seus tipos e funções que não poderá escrever interfaces para suas classes e muito menos fazer com que o interior faça algo que valha a pena.
Você realmente não aprenderia OOP em uma aula introdutória de qualquer maneira, seria apenas uma sintaxe - pular direto para o OOP tornaria as coisas mais complicadas de entender (a princípio) do que já é.
OOP não é sobre sintaxe declarante para formar classes, é sobre estruturas de dados, padrões de design, polimorfismo, herança e composição.
Para fazer todas essas coisas que você precisa saber sobre programação procedural, algo facilmente feito em C. Você pode transportar quase tudo o que aprende com C para Java ou C ++ de qualquer maneira, talvez seja necessário repensar algumas das coisas que você considerava óbvias em C, MAS ... Você precisa conhecer a gramática (onde você está na introdução C) para escrever sentenças (deve escrever procedimentos para definir interfaces), parágrafos (conhecer estruturas de dados) e conhecer alguns padrões de design (tragédia, comédia, falhas) herói, como eles interagem e quando não usá-los) antes que você possa escrever romances completos (sistema completo de POO).
Se eu fosse você, escolheria alguns dos seguintes livros: Linguagem de programação C , Linguagem de programação Java , Padrões de design , Gang of Four e Hachura de padrões . Definitivamente, eu pegaria uma cópia da Linguagem de Programação C se levasse a sério o C / C ++.
Se você deseja apenas percorrer todo o caminho, o Java (e fazendo isso pelo $) identifica alguns livros sobre padrões de design Java e como usar o Java com os servidores Web Apache e Tomcat e alguns livros sobre programação de banco de dados SQL. O Java é tão chocante na web, desculpe, mas o PHP tem um histórico de toneladas de brechas de segurança, tornando-o tão difícil quanto o Windows impedir que o servidor seja enraizado ou que os bancos de dados SQL sejam injetados.
Você também deve reservar um tempo para aprender SQL, o Oracle MySQL Postgresql e o MSSQL têm muito em comum em relação à sintaxe, mas se eu tivesse que escolher apenas aprender um para mim, escolha o Postgresql apenas porque é licenciado em BSD em vez de GPL (você deve comparar e contraste também nas licenças GPL / BSD)
fonte
Eu diria que a maioria dos códigos escritos em linguagens orientadas a objetos como Java não é realmente orientada a objetos. Realmente entender as idéias por trás do OO é difícil, como resultado, supostamente, o código OO é realmente principalmente processual.
No entanto, isso não é nada errado ao escrever código processual em Java. Sim, há benefícios em fazer OO, mas não é algo que eu queira confundir um programador iniciante. Portanto, nessa base, não vejo nada de errado em ensinar Java. Não espere OO real com isso, mas funciona.
No entanto, o Java oculta muitos detalhes de baixo nível sobre o que está acontecendo dentro do computador. C deixa isso muito mais exposto. Pode-se argumentar que os alunos devem aprender como esses detalhes de baixo nível funcionam antes de usar um idioma que cuide deles. Mas você também pode argumentar que deve ignorar esses detalhes e aprendê-los mais tarde.
fonte
Vários outros já responderam ao longo deste tema, mas acho que vale a pena declarar isso de forma mais explícita.
Mesmo que você comece a aprender programação com uma linguagem orientada a objetos como Java, comece aprendendo técnicas de programação procedural antes de chegar aos conceitos de OO . Ao ensinar um novo programador Java, você não os apresenta primeiro a objetos e classes, mas a instruções e variáveis. Quando o aluno está em posição de aprender muito sobre objetos e classes, ele já tem pelo menos o básico de programação procedural.
Portanto, pelo menos, você precisa aprender programação procedural em Java e, em seguida, aprender programação orientada a objetos em Java. Se você passa um ano inteiro em programação procedural ou apenas passa as primeiras semanas do curso de programação, e se usa ou não uma linguagem diferente, está apenas discutindo os detalhes.
fonte
Para ser muito franco, acho que o momento para isso vem principalmente de programadores antigos que desejam ter velhos tempos.
Antes de dizer qualquer outra coisa, eu absolutamente não sustento nenhum argumento para programadores mais velhos, muitos deles são simplesmente incrivelmente qualificados. Infelizmente, às vezes aqueles que não são, que ficam loucos e nunca foram realmente bons em programação para começar ... se tornam professores quando não conseguem invadir o 'mundo real'. (Nem todos os professores também ... mas ... MUITOS)
OOP não é o santo graal da programação, mas também a programação processual é uma relíquia. É bom conhecer pelo menos alguns dos dois, mas acho que a prática geral do que acaba sendo ensinado como programação processual tende a ser um enorme desperdício de tempo e esforço. Precisamos aprender a programar na academia, não apenas um estilo ou outro. Atribuo um pouco de código terrível e conceitos errados a isso, incluindo o meu.
fonte
Duas razões para mim: Uma programação OO veio resolver problemas de programação procedural. Portanto, ao escrever algumas codificações processuais e as mesmas coisas no OO, fica mais fácil entender a diferença.
Há também um elemento adicional aqui: As duas abordagens para educar sobre os tópicos de programação. Pode-se começar o mais baixo possível (por exemplo, montagem, em muitos lugares processuais, outros começam com circuitos) e depois subir (em direção a OO / Funcional / Gerenciado). A outra abordagem é começar no mundo físico (por exemplo, Navegador / Windows 7 etc.) e depois começar a ir mais fundo. Existem prós e contras em cada abordagem. Sua universidade escolheu a primeira e para começar com o procedimento. Pode haver alguma justificativa ou eles simplesmente copiaram outra pessoa :-).
fonte
Não há outra razão senão a inércia institucional. Olhe para a CMU, eles jogaram fora todo o currículo de OOP e o substituíram por programação funcional. Portanto, mais uma vez, a resposta para sua pergunta é que é uma escolha arbitrária feita pelos administradores de qualquer escola que você frequenta. Caso alguém esteja se perguntando sobre as declarações factuais que fiz aqui, é o post sobre a mudança de currículo na CMU por um professor / administrador: Ensinar FP a calouros .
fonte