Professional Documents
Culture Documents
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!
Perchunlinguaggiodiprogrammazione?
LaCPUdelcomputerlarealizzazionepratica dellacosiddetta
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
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 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/