Jump to content

Ensino de (Object) Pascal


thoga31
 Share

Recommended Posts

Olá, pessoal.

Uma das coisas que mais me fascina é o ensino da programação. Por alguma razão, gosto de ensinar os mais "jovens" (em conhecimentos) acerca de programação em geral e acerca de Pascal em particular.

Algo que eu já me meti a desenvolver foi um protótipo de um programa de uma Unidade Curricular (UC) de uma faculdade em que a cadeira seria de Programação com a linguagem Pascal, e seria uma UC anual.

Gostaria de debater convosco não um programa de uma UC (isso foi só uma introdução ao tópico e um devaneio meu), mas sim qual seria porventura a melhor sequência de ensinamentos a dar a um aprendiz que se esteja a iniciar em Pascal até atingir um nível mínimo (qual é este nível?) de Object Pascal.

Acho que se torna um assunto interessante na medida em que, como sabemos, não é fácil escolher a melhor sequência quando toda a programação em Pascal, a par de outras linguagens, interliga conhecimentos díspares mas que não podem ser dados ao mesmo tempo.

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Bem, pessoalmente acho que numa primeira fase, o ensino do básico do Pascal é essencial...

Estruturas de controlo, de repetição, tipos de dados, variáveis, records, arrays, e claro procedimentos e funções.

Na componente visual (UI), depende de qual o objectivo. Consola, Windows, Ambos?

Hoje em dia, cada vez menos necessidade há de consola, especialmente para os iniciados, que por vezes parecem ter aversão ao não uso do rato.

Mas também, writeln, readln, e gotoXY's não é coisa que demore assim tanto a ensinar. E pode servir de apoio enquanto aprender os restantes conceitos básicos, antes de se verem de repente mergulhados em janelas.

Ficheiros sempre achei importante, e a modos que de confessionário, foi ao aprender a trabalhar com ficheiros que despertei para a programação a sério. A ideia de poder guardar o trabalho feito numa sessão foi o gatilho que faltava para eu decidir abraçar isto de uma vez por todas.

Mas... Valerá ainda a pena os métodos tradicionais, AssignFile e afins? Sinceramente, não creio. Há muito para ensinar, e hoje em dia, acho muito mais útil ensinar a trabalhar, por exemplo, com uma base de dados relacional (SQLite, por exemplo, pela sua simplicidade, e que deixa preparado para outros voos no futuro) do que ficheiros directamente.

Eventualmente, o uso da TStringList para manusear ficheiros de texto pode ser um ponto de viragem entre o Pascal normal e o inicio do OOP. É uma classe simples, fácil de usar, e que não dispensa algumas regras básicas de OOP.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Tendo em conta alguns tópicos recentes em que vejo o pessoal a começar um programa pela UI (e a dizer que "só" falta o resto), e outros em que o pessoal não consegue separar a UI do programa, uma coisa que me parecia útil era teres um interpretador de Pascal que te permitisse não ensinar UI de todo no início. Ou seja, os alunos podia-se concentrar em aprender a implementar algoritmos e estruturas de dados básicas, sem perderem tempo com pormenores da UI.

Depois de ensinadas funções/procedimentos/métodos/whatever, era capaz de também ser útil ensinar como organizar o programa em diferentes módulos.

E depois sim, pode-se dedicar algum tempo a adicionar uma UI básica em cima dos módulos da camada computacional do programa.

Link to comment
Share on other sites

E já agora, aposta forte a explicar a indentação e suas vantagens...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Na componente visual (UI), depende de qual o objectivo. Consola, Windows, Ambos?

Quando refiro Object Pascal não me refiro a Delphi. Pessoalmente faço esta distinção: Object Pascal é Pascal com OOP, e Delphi é Object Pascal com GUI. Isto porque podemos ter OOP sem GUI na perfeição.

Aquilo que continuo sem ver bem é a ordem pela qual ensinar todas essas coisas. Já vi imensas opiniões acerca da ordem pela qual ensinar uma linguagem, porque é fácil dizer aquilo que se deve ensinar, difícil é encontrar uma ordem que tenha lógica do ponto de vista do aprendiz.

Knowledge is free!

Link to comment
Share on other sites

Delphi também dá em consola... 🙂

OOP é OOP, o resto é paisagem... Ou melhor, é UI! hehehe

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

A distinção entre Delphi e Object Pascal não é clara. Quando dizes que Delphi dá em consola, é verdade, no entanto metdade das coisas que caracterizam o Delphi (GUI) vão embora, e o que te sobra é essencialmente Object Pascal "puro".

Knowledge is free!

Link to comment
Share on other sites

Mal era que o Delphi fosse caracterizado só pelo GUI. 🙂

É sim uma componente forte, e a VCL é uma das principais vantagens de programar em Delphi.

Durante anos se confundiu o Delphi com a VCL, mas hoje em dia, é fácil programar em Delphi sem a VCL, usando por exemplo, a framework FireMonkey (FMX).

São apenas componentes diferentes para chegar ao UI.

Mas sim, a distinção não é clara, até porque, para todos os efeitos, Delphi é OOP. Apenas um dialecto ligeiramente diferente. 🙂

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

The Visual Component Library (abbreviated VCL) is a visual component-based object-oriented framework for developing Microsoft Windows applications. It was developed by Borland for use in, and tightly integrated with, its Delphi and C++Builder RAD tools (now owned by CodeGear, division of Embarcadero Technologies). It is written in Object Pascal.

in Wikipedia

A distinção não é nada clara, mas a mim deste-me a ideia, novamente, de que o Delphi é essencialmente o Object Pascal com GUI (e todas as frameworks associadas).

É um dialecto diferente, tanto que existe no Free Pascal uma compiler directive para compilar em modo Delphi, mas fora esta "meia dúzia" de diferenças entre dialectos, talvez a melhor distinção que possa haver seja mesmo a de Delphi ser Object Pascal com GUI, ou seja, Object Pascal será Extended Pascal, só para consola, mas com OOP. É onde melhor se pode definir a barreira, a existir, e torna-se igualmente a fronteira mais fácil de definir e explicar.

Historicamente nem fica longe da verdade - o Delphi foi originalmente o nome do primeiro IDE RAD do mundo (salvo erro) que usava um dialecto de Object Pascal adaptado ao GUI. Foi tão famoso que se começou a chamar à própria linguagem o nome do IDE, Delphi, e por esta razão as fronteiras entre Object Pascal e Delphi se tornam difíceis de determinar.

Tendo em conta, portanto, os factos históricos dos dialectos de Object Pascal e a origem do Delphi, creio ser minimamente legítimo definir uma fronteira, a existir, na componente do GUI. 🙂

Anyway, quanto ao ensino de Object Pascal (sem GUI), talvez esta ordem pudesse ser um ponto de partida:

  1. Introdução à lógica e algoritmia, para quem se estiver a iniciar do zero;
  2. Tokens do Pascal, literais, comentários;
  3. Estrutura base de um programa (só falar dos blocos que costumam compor um programa Pascal);
  4. Conceito de tipo de dados (type), variável (var) e constante (const);
  5. Tipos de dados simples;
  6. Operadores;
  7. Estruturas de decisão;
  8. Estruturas de repetição (não todas, o for-in deve ser depois);
  9. Procedimentos e funções;
  10. Passagem de argumentos;
  11. Strings e sua manipulação;
  12. Arrays estáticos;
  13. Records (inc. variantes);
  14. Array of record;
  15. Arrays e records constantes (incrivelmente, poucas pessoas sabem fazer records constantes);
  16. Apontadores (nunca sei bem onde encaixar estes meninos, lol);
  17. Arrays dinâmicos.

Ainda falta muita coisa, mas para uma introdução, o que acham?

Knowledge is free!

Link to comment
Share on other sites

Sujeitando-me a parecer muito burro... mas o que sao records constantes mesmo? 😛

type TMember = record
       nick : string;
       messages : word;
    end;

// Record constante:
const Kline777 : TMember = (nick : 'Kline777'; messages : 260);
Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Nice, lá está... acho que nunca tinha visto isso 😛

Em relação à tua lista, apesar de achar que a sequência tem bastante lógica, acho só que se calhar tem muita teórica na parte inicial. Não sei bem qual o teu publico-alvo, mas pode ser complicado quem nunca viu programação à frente ter de aprender quase os teus primeiros 7 passos antes de conseguir fazer um programa simples de teste.

Falo nisto porque na escola profissional começámos a programar desde a aula 1... Os conteúdos estavam +/- orientados para as estruturas de decisão e ciclos, os tipos de variáveis existentes vinham de arrasto á medida que fossem necessários 😛

Mas pensando nisso agora nao posso dizer que concorde muito com a ordem com que as coisas foram dadas. A questão lá é que adaptaram o programa para que se conseguisse programar logo sem saber muito do que se passava à volta...

Se calhar nao foi o ideal para se aprender as coisas como deve ser, mas serviu bem para motivar os alunos desde o inicio.

Edited by Kline777
Link to comment
Share on other sites

Vou ser crucificado...

Pointers numa iniciação?

Sinceramente, nao vejo necessidade.

Quanto ao resto, será mais ou menos isso...

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não vais ser crucificado, não. 😄

Não digo na iniciação mesmo primórdios da aprendizagem, mas há que aprender um dia apontadores. São importantes, apesar de muitas vezes não os usarmos. Ganhamos uma nova compreensão da memória, isto se os estudarmos bem e em conjunto com umas bases de hardware (CPU e RAM).

Por exemplo, há quem não compreenda porque é que uma lista ligada é muitíssimo mais eficiente que um array dinâmico ao qual, em certas situações, estamos sempre a fazer SetLength. Compreendendo um pouco apontadores e como funciona a memória e a forma como estas estruturas se organizam em memória, ganhamos todo um novo entendimento que nos permitirá ter ferramentas que ajudem a optimizar imenso os programas (em determinadas situações).

Knowledge is free!

Link to comment
Share on other sites

Sem dúvida, devem ser ensinados...

Só falei porque falaste na iniciação, e meteste os pointers.

Esse eu punha já num curso de nível II

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Eu falei na iniciação, mas a minha lista não é toda de iniciação. Se assim fosse, eu perguntava-te porque carga d'água andaste a falar de GUI 😛

É sabido que os aprendizes não podem pegar em GUI antes de determinada altura uma vez que, caso contrário, habituam-se de tal maneira a certas coisas que ganham, no final, hábitos de programação terríveis. Futuramente, qualquer coisa que não envolva a facilidade de um IDE RAD é simplesmente "demasiado complexo e estúpido". 😉

Se reparares na minha lista, eu coloquei coisas que não se podem ensinar a um iniciado propriamente dito... arrays dinâmicos, por exemplo. Se não compreenderem bem o que estes implicam, nem quero imaginar o abuso que viria do seu uso. Era para tudo e para nada. Neste caso, a meu ver, por exemplo, para não haver "tentações", antes de arrays dinâmicos era ensinar listas ligadas. É que se um gajo aprende arrays dinâmicos, dificilmente quer ver listas ligadas à frente. Já viste a gincana mental que é preciso ter muitas vezes para acertar com aquilo sem que haja memory leak e uma porrada de outros problemas potenciais? 😄

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Não considero tão terrível o ensino de GUI a iniciados, desde que seja bem acompanhado pelas bases de programação. É uma questão de equilíbrio entre ensino e motivação.

Independentemente de eu ser do tempo do DOS, com muito orgulho, a verdade é que quem aprende agora, não precisa ser ensinado em GUI para considerar a consola ultrapassada... Eles já acham isso antes mesmo de abrirem o IDE.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Não considero tão terrível o ensino de GUI a iniciados, desde que seja bem acompanhado pelas bases de programação. É uma questão de equilíbrio entre ensino e motivação.

Garanto-te que este equilíbrio, pelo menos para já, é bem mais teórico do que real, infelizmente.

Independentemente de eu ser do tempo do DOS, com muito orgulho, a verdade é que quem aprende agora, não precisa ser ensinado em GUI para considerar a consola ultrapassada... Eles já acham isso antes mesmo de abrirem o IDE.

Eu nem me refiro à questão da consola ultrapassada, porque isso é o mais-que-óbvio 😄

Refiro-me sim à programação propriamente dita. Eu cheguei a ensinar umas coisas básicas de Console Applications em VB.NET a um aluno desta mesma linguagem, mas que começou logo com GUI. Sabes o que ele me disse acerca do input e output de dados? Que era estúpido, pois o que fazia sentido era ter uma InputBox ou uma TextBox com um Button!

Parte daqui e tenta imaginar o resto... Pois é, eu já vi imenso disso. Sabes que eu tenho contactado com vários membros iniciados e tenho mesmo, neste momento, um "pupilo" de Pascal. Já vi e ouvi coisas fenomenais. 😉

Knowledge is free!

Link to comment
Share on other sites

Eu também tenho um... O que ele não tem é pensamento lógico nenhum... Nem vontade de aprender, ainda que diga que sim, e esteja sempre a perguntar isto é aquilo! Mas quando começo a explicar, perde-se nas coisas mais básicas.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Eu também tenho um... O que ele não tem é pensamento lógico nenhum... Nem vontade de aprender, ainda que diga que sim, e esteja sempre a perguntar isto é aquilo! Mas quando começo a explicar, perde-se nas coisas mais básicas.

Estás a ensinar Delphi (GUI) ou Pascal (consola)?

Se for Delphi, experimenta metê-lo primeiro em Pascal. Se for Pascal, o caso é então um pouco mais bicudo 😄

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.