42
Linguagens de Programação Andrei Rimsa Álvares Apresentação da Disciplina

Linguagens de Programação - homepages.dcc.ufmg.brhomepages.dcc.ufmg.br/~rimsa/documents/decom009/lessons/Aula00.… · Qual a diferença entre sintaxe e ... – Uma linguagem que

  • Upload
    vuhanh

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

LinguagensdeProgramação

AndreiRimsaÁlvares

ApresentaçãodaDisciplina

Introdução

•  Oqueéumalinguagemdeprogramação(LP)?

DiferentespessoastêmdiferentesdefiniçõesdeLPs!

Paravocê,oqueéumaLP?

AlgumasDefinições

"Atooltoaidtheprogrammer"(inpart)C.A.RHoare

"anotaIonalsystemfordescribingcomputaIoninmachine-readableandhuman-readableform"

KennethLouden

"aconvenIon/methodforwriIngdescripIonswhichcanbeevaluated"

ChrisReade _

Oquevocêachadessasdefinições?

UmaDefiniçãoMelhor

"anotaIonalsystemfordescribingcomputa=oninmachine-readableandhuman-readableform"

KennethLouden

Oqueésercomputável?

Oqueéserlegívelpormáquina?

Oqueéserlegívelporhumanos?

Computável

•  Oqueésercomputável?

-  Tudoquepodeserexecutadoporumcomputador(máquinadeTuring)

"anotaIonalsystemfordescribingcomputa=oninmachine-readableandhuman-readableform"

KennethLouden

Alguémconhecealgumalinguagemnão-Turingcompleta?

AmaioriadaslinguagensdeprogramaçãosãoTuringcompletas

LegívelporMáquinas

•  Oqueéserlegívelpormáquinas?

-  Alinguagemdeveterumasintaxefixaparaqueocomputadorpossaler/analisaroprograma

-  Alinguagemdeveterumasemân=cafixaparaqueocomputadorsaibaosignificadodoprogramaaserexecutado

"anotaIonalsystemfordescribingcomputaIoninmachine-readableandhuman-readableform"

KennethLouden

QualadiferençaentresintaxeesemânIca?

LegívelporHumanos

•  Oqueéserlegívelporhumanos?

-  Alinguagemdeveserdefácilentendimentoporhumanos

-  Capacidadedalinguagemdeprovermeiosparasuportar/imporabstrações

"anotaIonalsystemfordescribingcomputaIoninmachine-readableandhuman-readableform"

KennethLouden

Comogerenciaracomplexidade?

BrechaSemânIca

•  Abrechasemân=caentrehumanosecomputadores

Humanos•  Interessadosemmodelaromundoreal

•  Maisinteressadosnoquepodeserfeitodoquenocomo

Máquinas•  Entendemdadosapenascomosequênciasdebits(0se1s)

•  Entendemapenasinstruçõesdebaixonível

LinguagensdeprogramaçãodealtonívelfazemaponteentreohomemeocomputadordiminuindoabrechasemânIcaaoprovernotaçõesde

altonívelqueaindapodemserexecutadasporumcomputador

LinguagensdeProgramação

LINGUAGENSDEPROGRAMAÇÃO

LinguagensdeProgramação

•  Quaislinguagensdeprogramaçãovocêsjáusaram?Quaislinguagensvocêsconhecem?

# LPs

LPsconhecidas

# LPs

LPsusadas

LPsPopulares

•  Rankingdaslinguagensmaispopulares♤

♤:ÍndiceTIOBE(hdp://www.Iobe.com/index.php/Iobe_index)

PorqueestudarLinguagensdeProgramação?

1.  Aumentarsuahabilidadedeexpressarideias2.  Aumentaroconhecimentoparaescolhadeumalinguagem

maisadequada3.  Melhoraracompreensãodaslinguagensquevocêusa4.  Melhoraroentendimentodecomolinguagenssão

implementadas5.  Facilitaroaprendizadodeoutraslinguagens6.  Desenvolversuapróprialinguagem?

MaisalgummoIvo?

RequisitosdeLinguagensdeProgramação

Universal

Natural

Implementável

Eficiente

Seumproblematemsoluçãocomalgoritmos,entãopodeserresolvidoporumaLP

Implementadaemumcomputador

ALPdeveproverasoperaçõesbásicasparaumdeterminadodomíniodeaplicação

ALPdevepossuirumaimplementaçãoeficiente

CritériosdeAvaliaçãodeLPs

Legibilidade

Redigibilidade

Confiabilidade

Custo

Facilidadedelereentenderprogramas

Conformidadecomaespecificação

Facilidadedeusarumalinguagemparacriarprogramas

Ocustototalfinal

Algumoutrocritério?

CritériosdeAvaliação:Legibilidade

•  Simplicidade–  Umconjuntogerenciáveldefuncionalidadeseconstruções–  PoucamulIplicidadedefuncionalidades

•  Ortogonalidade–  UmconjuntorelaIvamentepequenodeconstruçõesprimiIvaspode

sercombinadodepoucasmaneiras–  Todapossívelcombinaçãoélegal

•  Comandosdecontrole–  Presençadecomandosdecontrolebemestabelecidos(while)

•  Tiposdedadoseestruturas–  Presençadefacilidadesparadefiniçãodeestruturasdedados

•  ConsideraçõessintáIcas–  ComposiçãodeidenIficadoresflexível–  Palavrasreservadaseformasparacriarcomandoscompostos–  ConstruçõesautodescriIvas,palavrasreservadassignificaIvas

CritériosdeAvaliação:Redigibilidade

•  SimplicidadeeOrtogonalidade–  Poucasconstruções,númeropequenodeprimiIvas,pequenoconjuntoderegrasparacombiná-los

•  Suporteaabstração–  Habilidadededefinireusarestruturasouoperaçõescomplexasdeformaquedetalhespossamserignorados

•  Expressividade–  UmconjuntodeformasrelaIvamenteconvenientesdeespecificaroperações(Ex.:inclusãodocomandoforemmuitaslinguagensdeprogramaçãomodernas)

CritériosdeAvaliação:Confiabilidade

•  VerificaçãodeIpos–  VerificarprogramasporerrosdeIpos

•  Tratamentodeexceções–  InterceptarerrosemtempodeexecuçãoparatomadademedidascorreIvas

•  Sinônimos(Aliasing)–  PresençadedoisoumaismétodosdisIntosdereferenciaramesmaáreadememória

•  Legibilidadeeredigibilidade–  Umalinguagemquenãosuportaaforma"natural"deexpressarumalgoritmoiráusarnecessariamenteabordagens"não-naturais"

CritériosdeAvaliação:Custo

•  Treinarprogramadoresparausaremalinguagem•  Escritadoprograma•  Compilaçãodoprograma•  Execuçãodoprograma•  Implementaçãodalinguagem(compiladordisponível?)•  Confiabilidade

–  Baixaconfiabilidadelevaaaltoscustos•  Manutenibilidade

OutrosCritériosdeAvaliação

•  Portabilidade–  Facilidadequeprogramaspodemsermovidosdeumaimplementaçãoparaoutra

•  Generalidade–  Aaplicabilidadeemumavastagamadeaplicações

•  Bem-definidade–  Acompletudeeprecisãodadefiniçãooficialdeumalinguagem

LinguagensdeProgramação

PARADIGMASDELINGUAGENSDEPROGRAMAÇÃO

ParadigmasdeLinguagensdeProgramação

•  Adefiniçãodeparadigmasdeprogramaçãoauxilianoagrupamentodelinguagenssimilares,quepodemserclassificadasemdoisIpos:

Asser=vas

Declara=vas

–  Baseadoemcomandos–  Linguagensdeaplicaçãogeral–  Paradigmas:imperaIva,orientadaaobjetos,orientadaaaspectos,orientadaaeventos,programaçãoconcorrente,…

–  Baseadonoconceitosdedeclarações(oquedeveserfeito,nãocomo)

–  Idealparaconstruirrelações(muitouIlizadoeminteligênciaarIficial)

–  Paradigmas:lógicoefuncional

AsserIvas:ProgramaçãoImperaIva

•  Centradonosconceitosdeestadoglobaldosistema(variáveis)eações(comandos)

•  Primeiroparadigmaasurgir,aindadominante

•  Vantagens–  Eficiência(arquiteturasatuaissãovonNeumann)–  Modelagem“natural”deaplicaçõesdomundoreal–  Paradigmamaisdoqueestabelecido

•  Desvantagens–  Implementaçõesdemasiadamenteoperacionais:definem“comofazer”enão“oquefazer”

AsserIvas:ProgramaçãoOrientadaaObjetos

•  Programasestruturadosemmódulos(classes)queagrupamumestado(atributos)eoperações(métodos)sobreesteestado

•  Classespodemserestendidas,viaherança,eusadascomoIpos(cujoselementossãoobjetos)

•  ÊnfaseemreuIlizaçãodecódigo•  UsomaiscomumjuntocomoparadigmaimperaIvo•  Visacorrigiroproblemadeváriasfunçõesacessaremvariáveis

globais(atravésdemodificadoresdeIpos)•  Englobaconceitoscomoencapsulamento,herança,polimorfismo•  TornaaprogramaçãomaisproduIva,facilitaamanutenção•  Tornaocódigomaisrobusto,correto,extensível,...

AsserIvas:ProgramaçãoOrientadaaAspectos

•  Naprogramaçãoorientadaaobjetos–  RelacionamentoentregruposdeenIdades–  EssencialmenteestáIca–  Mudançanosrequisitoscausamgrandeimpacto

•  Naprogramaçãoorientadaaaspectos–  PodeservistacomoumaextensãodaOO–  Permitemodificardinamicamenteomodeloparaatendernovosrequisitos

AsserIvas:ProgramaçãoOrientadaaEventos

•  Baseadaemeventosassíncronos–  Nãointerrompesuaexecuçãoaoprocessarentradasesaídas–  Osistemaoperacionalenviaeventos,quesãotratadospeloprograma

•  Nãoexisteisoladamente:éumaextensãoalinguagensimperaIvaseorientadasaobjetos

•  Exemplos–  Interfacesgráficas,web,…

AsserIvas:ProgramaçãoConcorrente

•  Váriosprocessosexecutandosimultaneamente

•  Paradigmacadavezmaisusual

•  PodeseruIlizadoemumúnicoprocessadorouemváriosparalelamente

•  Podeserdistribuído

DeclaraIvas:ProgramaçãoFuncional

•  Baseadaemfunções(comonamatemáIca)–  Umafunçãonãopossuiefeitoscolaterais–  Nãoháoconceitodevariáveiscomomapeamentosemmemória

•  Implementaummapeamentoentreentradaesaída–  EsIlodeclaraIvo:semconceitodeestadoecomandosdeatribuição

•  Vantagens–  Provadepropriedades–  Concorrênciaéexploradadeformanatural

•  Desvantagem–  Implementaçõesemgeralsãoineficientes

DeclaraIvas:ProgramaçãoFuncional

•  Exemplo(emHaskell)

–  Usoextensivoderecursividade,funçõesdealtaordem,polimorfismoeavaliaçãolazy

fact :: Int -> Intfact n | n == 0 = 1 | n > 0 = n * fact (n - 1)

DeclaraIvas:ProgramaçãoLógica

•  Definição–  Programassãorelaçõesentreentradaesaída–  EsIlodeclaraIvo

•  Implementamrelações(BaseadasemcláusulasSE-ENTÃO)–  Unárias(fatos),binárias,n-árias

•  Computação:consultasqueretornamverdadeirooufalso–  Emcasoverdadeiro:oprogramaobtevesucesso–  Emcasofalso:dizqueoprogramafalhou(masnãosignificaquea

consultasejafalsa,apenasnãofoipossívelinferircomoverdadeira)•  AplicaçãoeminteligênciaarIficial•  Vantagensedesvantagenssemelhantesaoparadigmafuncional

DeclaraIvas:ProgramaçãoLógica

•  Exemplodeprogramaseconsultas

estrela(sol).

orbita(venus, sol). orbita(terra, sol). orbita(marte, sol). orbita(lua, terra).

planeta(B) :- orbita(B, sol).

satelite(B) :- orbita(B, P), planeta(P).

?- orbita(venus, sol).true.

?- planeta(mercurio).false.

?- planeta(X).X = venus ; X = terra ; X = marte.

?- satelite(X).X = lua.

Paradigmas

•  Emqual(is)paradigma(s)asLPsaseguirpodemserclassificadas?

Histórico

•  LinhadotempodelinguagensdeprogramaçãodaO'Reilly♧

♧:hdp://www.oreilly.com/go/languageposter

LinguagensdeProgramação

EMENTA,AVALIAÇÕES,REGRAS

Ementa

1)  SintaxeesemânIca2)  Sistemasdecomputação3)  Nomes,amarraçõeseescopo4)  Tiposdedados5)  VerificaçãodeIpos6)  Subprogramas7)  Programaçãoorientadaaobjetos8)  Tratamentodeexceções9)  Programaçãoconcorrente10)  Programaçãofuncional(Haskell)11)  Programaçãológica(Prolog)

Avaliações

•  Prova1–  Pontuação:40pts–  Data:02/05/2018

•  Prova2–  Pontuação:40pts–  Data:20/06/2018

•  ProvaSuplementar–  Pontuação:40pts–  Data:27/06/2018

•  ProvaEspecial–  Pontuação:100pts–  Data:04/07/2018

•  Listasdeexercícios–  Pontuação:20pts(2ptscada)–  Data:todasemanaantesdasaulas

Regras

•  Apresençaéobrigatóriaem75%dasaulas–  Emtodasasaulashaveráchamada–  Nãohaveráabonodefaltas,salvooscasosprevistosporlei

•  Aprovaéindividualesemconsulta–  Apósoiníciodaprova,deve-seesperarnomínimo30minutosantesdeentregaraprova

–  Colasserãopenalizadascomnotazero

•  Sobreaslistas:–  Fazerdeformaindividualemanuscrita–  Entregarnasemanaposterioraoconteúdodado–  Fazerpelomenos50%decadalistaparaqueelasejaconsiderada

Estudem!

LinguagensdeProgramação

BIBLIOGRAFIA

Bibliografia

•  R.Sebesta•  ConceitosdeLinguagensde

Programação•  9aedição,2011

•  F.Varejão•  LinguagensdeProgramação•  1aedição,2004

Bibliografia

•  J.Mitchell•  ConceptsinProgramming

Languages•  1aedição,2002

•  A.Webber•  ModernProgramming

Languages:APracIcalIntroducIon

•  2aedição,2010

Bibliografia

•  K.Louden•  ProgrammingLanguages:

PrinciplesandPracIces•  2aedição,2002

•  M.Gabbrielli;S.MarIni•  PrinciplesofProgramming

Languages:PrinciplesandParadigms

•  1aedição,2010

LinguagensdeProgramação

ISSOÉTUDOPESSOAL!