You are on page 1of 37

Iltedescoperlafilosofia,lingleseperilteatro, litalianoperlalirica

NotofilosofotedescodicuinonmisovvieneilnomeecheGooglenonaiutaacercare

UNA(TROPPO)BREVESTORIADEI LINGUAGGIDIPROGRAMMAZIONE

Agenda
Perchunlinguaggiodiprogrammazione?(il computernonmaggico???:o) Comefattounlinguaggiodi programmazione?(si,cisonolinguaggiche descrivonolinguaggi) ChiPascal?Dove?Quando? EprimadiPascal? Edopo?(semprecheesistaundopoPascal:P)

Perchunlinguaggiodiprogrammazione?
Possoscriveredocumenticonlacalcolatrice scientifica?
NO!

Possofarecalcoliconunamacchinada scrivere?
NO!

Maallorachedifferenzactrauna calcolatriceounamacchinadascrivereeun PC?

Perchunlinguaggiodiprogrammazione?
LaCPUdelcomputerlarealizzazionepratica dellacosiddetta

Unamacchinachepuessereprogrammata pereseguireoperazionicomplesseapartire daoperazionisemplici.

Anatomiadiunlinguaggio

Grammatica

Linguaggiodi programmazione
Lexer Parser

Anatomiadiunlinguaggio:esempio
IlGattoiltopo
Frase::= Soggetto + Verbo + Complemento oggetto

Linguaggiodi programmazione
Gatto:= Topo FALSO!!!!!
[[Il[gatto]][][il [topo]]] OK!

Anatomiadiunlinguaggio
Lagrammaticadeveesseredefinitainun linguaggiononambiguo
Esisteunalinguaggio(equindiunagrammatica)per definireunagrammatica[BNF,EBNF]
Curiosamente(pergliinformaticinontroppo)la grammaticastatausataperdefiniresstessa

Definitalagrammaticasidovrebbeprendere tuttoecreareunparser
Laprocedurasempreidentica,quindiesisteun linguaggioancheperquesto

Infinesidevecrare illexer apartiredalparser


Ancheperquestoesisteunlinguaggio!!!

Andnow Letshave fun!!!


Insomma:andiamoavedereunpodeilinguaggiche hannofattolastoriadellinformatica!

Inorigineerano
Fortran
FormulaTranslator Moltousatoneglianni60percalcoloscientifico
tuttoramoltelibreriespecialistichesonoscrittein Fortran Tuttoravienestudiatoeutilizzatoperchciche funzionanonsicambia( )

Hello Fortran
PROGRAMHELLO WRITE(*,10) 10FORMAT('HelloWorld!') STOP END

Inorigineerano
COBOL
COmmon BusinessOriented Language Moltoutilizzatopercalcolisemplicieperaspetti pioperativideicalcolatori Lebanchehannoancoraimainframecheper compatibiliteseguonoilcodiceCOBOL(orasi chiamaspessoABAP)pergestiretuttele transazionifinanziarie
Sefateacquistisuebay,ivostridatipassano attraversounprogrammascrittoinCOBOL

Hello Cobol
000100IDENTIFICATIONDIVISION. 000200PROGRAMID.HELLOWORLD. 000300DATEWRITTEN.02/05/9621:04. 000400*AUTHORBRIANCOLLINS 000500ENVIRONMENTDIVISION. 000600CONFIGURATIONSECTION. 000700SOURCECOMPUTER.RM COBOL. 000800OBJECTCOMPUTER.RMCOBOL. 000900 001000DATADIVISION. 001100FILESECTION. 001200 100000PROCEDUREDIVISION. 100100 100200MAINLOGICSECTION. 100300BEGIN. 100400DISPLAY""LINE1POSITION1 ERASEEOS. 100500DISPLAY"HELLO,WORLD."LINE 15POSITION10. 100600STOPRUN. 100700MAINLOGICEXIT. 100800EXIT.

BANG!!!
Adoverfartuttosiscriveeriscriveunsaccodi voltetantarobacherischiadiessereinutile!!!

EPascal?
Pascalnascecomeprogettodiricercadelprof. Niklaus Wirth neglianni70 Unicoscopo:avereunlinguaggiodidattico
Linguaggioprocedurale DerivatodaFORTRAN

Hello Pascal
programHello; var a:string; begin a:=Hello,Pascal; Writeln(a); end.

Maaquestopunto DovPascal?

Perchtuttiquestilinguaggi?
Perchcoltemposono cambiateleesigenze: Neglianni60tuttoera moltosperimentale Glianni70hannoportato alladiffusionedeilinguaggi procedurali.Ilsoftware artigianato. Glianni80portanoalla diffusionedeiprimiPCealla programmazioneadoggetti. Ilsoftwaremanifattura seriale. Glianni90portanoalla programmazioneadaspetti. Ilsoftwarecommercialee leaziendevivonodi software. Glianni00portanoalla SOA.Nonesistepiil concettodisoftware,madi servizio.

Lefamiglie:LinguaggiProcedurali
Tipicamentecontengonotuttolalgoritmo, linterfaccia,idatinellostessofile Linguaggitipici:
C
(creatoperprogrammareUnix)

Pascal
Chediredipi???

PHP
Unodeiprimilinguaggiinterpretatiperinternet.Lastruttura similealC

Svantaggi:
Ognimodificasignificariprenderetuttoerifaredeipezzidi codice

Hello C
#include<stdio.h> main(){ printf("HelloWorld!"); }

Hello PHP
<?php echo 'Hello World!'; ?>

Lefamiglie:LinguaggiadOggetti
modularizzazione modularizzazione modularizzazione!!!
siiniziaapensarenonpiacosadevefareinglobaleil programma,maachecaratteristichehannogli elementichepartecipanoallalgoritmoecomequeste modificanolalgoritmostesso

Arrivalinterfacciagrafica!!
InlinguaggicomeCePascalavevastranieffetti

Caratteristichedeilinguaggi:
Concettodivisibilitdiunavariabile Concettodicampoepropriet Lefunzionisichiamanometodi

Hello Cinfinestra!!!
#include <windows.h> LRESULTCALLBACKWindowProcedure(HWND,UINT,WPARAM,LPARAM); char szClassName[]="MainWnd"; HINSTANCEhInstance; int WINAPIWinMain(HINSTANCEhInst,HINSTANCEhPrevInstance,LPSTRlpCmdLine,int nCmdShow){HWNDhwnd; MSGmsg; WNDCLASSEXwincl; hInstance =hInst; wincl.cbSize =sizeof(WNDCLASSEX); wincl.cbClsExtra =0; wincl.cbWndExtra =0; wincl.style =0; wincl.hInstance =hInstance; wincl.lpszClassName =szClassName; wincl.lpszMenuName =NULL;//Nomenu wincl.lpfnWndProc =WindowProcedure; wincl.hbrBackground =(HBRUSH)(COLOR_WINDOW +1);//Colorof thewindow wincl.hIcon =LoadIcon(NULL,IDI_APPLICATION);//EXE icon wincl.hIconSm =LoadIcon(NULL,IDI_APPLICATION);//Small program icon wincl.hCursor =LoadCursor(NULL,IDC_ARROW);//Cursor if (!RegisterClassEx(&wincl)) return 0; hwnd =CreateWindowEx(0,//Noextended window styles szClassName,//Class name "Window",//Window caption WS_OVERLAPPEDWINDOW &~WS_MAXIMIZEBOX, CW_USEDEFAULT,CW_USEDEFAULT,//Let Windowsdecidetheleft andtoppositions of thewindow 120,50,//Width andheight of thewindow,NULL,NULL,hInstance, NULL);//Make thewindow visible onthescreen ShowWindow(hwnd,nCmdShow);//Run themessage loop BOOLbRet;while((bRet =GetMessage(&msg,NULL,0,0 ))!=0){ if (bRet ==1){//handle theerror andpossibly exit }else{TranslateMessage(&msg);DispatchMessage(&msg);}}return msg.wParam;}LRESULTCALLBACK WindowProcedure(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam){PAINTSTRUCTps;HDChdc;switch (message){caseWM_PAINT:hdc = BeginPaint(hwnd,&ps);TextOut(hdc,15,3,"Hello World!",13);EndPaint(hwnd,&ps);break;caseWM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,message,wParam,lParam);}return 0;}

Lefamiglie:LinguaggiadOggetti
C++
sintassiecompatibilitconC,etantiaccrocchiperunireCegliOggetti

ObjectiveC
incompatibileconqualunquelinguaggioesoprattuttoindipendentedaC.Applevivesolodi ObjC

Java
ilprimolinguaggiosemiinterpretato,usaunaMacchinaVirtualepereseguireilcodice

ObjectPascal eDelphi
Anchepascalricevelasuaprimaevoluzioneversolaprogrammazioneadoggetti

.net
C# 1.02.03.0
iltentativo[decisamenteriuscito]diMicrosoftdientrarenelmondodeilinguaggiadoggetti

Delphi .net
PortanoanchePascalnelleradegliOggetti.TurboPascal 7.0gisupportaObjPascal,manonlo usanessuno.OggiDelphi partedellapiattaforma.net

VB9
Facendopartediungrandeprogettoperportareivecchilinguaggianuovepiattaforme,anche Visual Basic (natodaCobolequalcheideadiprogrammazionestrutturata)vieneportatonel mondodeiFramework

Hello Java!(usandoSwing)
importjavax.swing.JFrame; importjavax.swing.JLabel; publicclass HelloWorld extends JFrame { publicHelloWorld(){ super("Hello World!"); JLabel HelloWorldLabel =new JLabel("Hello World!"); getContentPane().add(HelloWorldLabel); setDefaultCloseOperation(EXIT_ON_CLOSE); setResizable(false); setLocation(350,320); setSize(160,60); setVisible(true); } publicstatic void main(String[]args){ new HelloWorld(); } }

Hello ObjectiveC (conCocoa)


#import<Foundation/Foundation.h> int main(int argc,constchar*argv[]){ NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init]; NSLog(@"Hello,World!"); [poolrelease]; return0; }

Hello Delphi!(inconsole)
programHelloWorld; {$APPTYPECONSOLE} begin WriteLn('HelloWorld!'); end.

Hello .net!
C# IL

Per
Ilinguaggisidividono,ancorainfine,inbase allamodalitdiesecuzione.
Unfile.exeunfilechestatoscrittoinuncerto linguaggioXepoistatotradottonellinguaggio macchina(illinguaggioX compilato) Unfile.bat unfilechevieneeseguitosenza doveresserecompilatodivoltainvolta(il linguaggiochelodescriveinterpretato).

Per
Compilati Pascal,Object Pascal C,C++,ObjectiveC Semicompilati Java C#,VB9,Delphi, Interpretati PHP Python Ruby Perl ...

Hello Python
"Hello World!"

Python ilnuovopascal?
ComePascalpermettelaprogrammazione strutturataclassica(chepiacetantoachi devepensareallalgoritmo
Permetteanche(esoprattutto)laprogrammazioneadoggetti ()olaprogrammazionefunzionale( lambdacalcolo!!)ma nondiciamoloingiro ;)

AlcontrariodiPascalgrandiaziendehanno decisodiutilizzarloperprodotticommerciali
Puessereusatopergestiredelle personalizzazioniinquantonondifficileda imparareecomunquemoltopotente

Ovvero???

PotenzialitdiPython

EsempiodicodicePython
def fattoriale(x): if x==0: return 1 else: return x*fattoriale(x1)

Appendice:LagraficainPascal!!!
Qualcheindirizzoutileperchivuolerestareamicodi Pascalnonostantetutto

http://userpage.fuberlin.de/~molski/fpsdl/

You might also like