Stefan Sokołowski ZAAWANSOWANE JĘZYKI PROGRAMOWANIA Inst. Informatyki, UG Gdańsk, 2015/2016 Zaawansowane Języki Programowania Wykład1,str.1 Na http://sigma.ug.edu.pl/ stefan/dydaktyka/zaawjezprog będą się stopniowo pojawiać: slajdy do wykładów szkicowy plan wykładu zadania z laboratorium spis literatury itd. Uwaga: przeczytanie tych materiałów nie wystarczy do zaliczenia!
Zaawansowane Języki Programowania Wykład1,str.2 Wymagania wstępne: zaliczone Języki programowania z I roku st. lic.(lub równoważne); obycie z programowaniem i biegłość w uruchamianiu programów. Wymagania na zaliczenie: zaliczyć laboratorium przez sprawdziany(łatwa droga), lub sprawdziany+rozbójnik pod koniec semestru(trudniejsza droga), lub zaliczenie poprawkowe(bardzo trudna droga) na co najmniej 51%; zdać egzamin w sesji podstawowej lub poprawkowej. procenty ocena p<51% 2.0 51% p<61 3.0 61% p<71 3.5 71% p<81 4.0 81% p<91 4.5 91% p 5.0 Tradycyjne dziedziny zastosowań Wykład1,str.3 Nauka(fizyka, astronomia, technika...) proste struktury danych(tablice), dużo obliczeń na liczbach rzeczywistych. Fortran,Algol60,... Biznes sporządzanie skomplikowanych zestawień i sprawozdań. Cobol. Sztucznainteligencja działania na symbolach(listy), elastyczność. Lisp, Prolog. Programowaniesystemowe dostęp do cech niskiego poziomu(dla efektywności). PL/I,C,... Internet niezależność od platformy, wymagania bezpieczeństwa. PHP,JavaScript,...
Wykład1,str.4 czytelność programów pisalność (łatwość pisania) programów niezawodność programów koszty Wykład1,str.5 Człowiek kulturalny zamienia się w bestię w trzech przypadkach: kiedy siada za kierownicę samochodu, kiedyjegodrużynagraważnymecz, kiedy dyskutuje o wyższości jednego języka programowania nadinnym.
Wykład1,str.6 rozumienie kodu praca wspólna pielęgnacja prostota języka: wiele konstruktów podstawowych dłuższa nauka programiści często znają tylko podzbiór, każdy inny wiele sposobów powiedzenia tego samego czytanie programów wymaga staranniejszej analizy wiele sposobów powiedzenia prawie tego samego jeszcze gorzej n=n+1; n+=1; n++; ++n; wieloznaczności w języku(np. w C: & ma dwa różne znaczenia) bardzo zmniejszają czytelność ALE języki bardzo proste wymagają długich programów, co zmniejsza czytelność. Wykład1,str.7 rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego Przykład: (ortogonalność) M w C elementy struktury mogą mieć dowolny typ, również tablicowy w C elementy tablicy mogą mieć dowolny typ, również strukturowy tablicewewnątrzstruktur,zawartewtablicach,...itp.sąok tablice i struktury są ortogonalne Przykład: (nieortogonalność) MwCwartośćoddawanaprzezfunkcjęmożemiećdowolnytypzwyjątkiem tablicowego typy i funkcje nie są ortogonalne
Wykład1,str.8 rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego Przykład: (ortogonalność) M w języku wewn. minikomputerów VAX: dodawanie komórki do rejestru ozn. ADDL rejestr komórka dodawanie rejestru do rejestru ozn. ADDL rejestr rejestr można w ten sposób dodać wszystko do wszystkiego Przykład: (nieortogonalność) M w języku wewn. dużych komputerów IBM: dodawanie komórki do rejestru ozn. A rejestr komórka dodawanie rejestru do rejestru ozn. AR rejestr rejestr w żaden sposób nie można dodać niczego do komórki pamięci Wykład1,str.9 rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego ALE zbyt dużo ortogonalności może zmniejszyć czytelność. Przykład: MW Algolu 68 wyrażenia warunkowe i inne rzeczy mogą występować po obu stronach przypisania: ifa<bthenaelsebfi := 0
Wykład1,str.10 szczegóły składni: język C x=arg; nizej=0; wyzej=x+1; while(wyzej-nizej > 1) { srodek =(nizej+wyzej)/2; if(srodek*srodek <= x) { nizej = srodek; else { wyzej = srodek; printf(" sqrt(%i) =%i\n", x,nizej); gorzej:identyczneklamry {... język Bash x=$1 nizej=0; wyzej=x+1 while[$[wyzej-nizej]-gt1] do srodek=$[(nizej+wyzej)/2] if[$[srodek*srodek]-le$x] then nizej=$srodek else wyzej=$srodek fi done echo" sqrt($x) =$nizej" lepiej:słowakluczoweif...fi do...done Wykład1,str.11 prostota i ortogonalność: duża liczba gotowych konstrukcji trudno się ich nauczyć i łatwo użyć błędnie mała liczba gotowych konstrukcji i reguły do ich łączenia łatwo(po minimalnej nauce) wymyślić dobry program ALE przesadna ortogonalność, kiedy każda kombinacja symboli coś dla kompilatora znaczy, utrudnia wykrycie błędu
Wykład1,str.12 abstrakcja możliwość definiowania złożonych danych i operacji i używania ich bez pamiętania szczegółów definicji abstrakcja procesu: np. podprogram(funkcja), którego wywołania mogą być używane jak predefiniowane operacje abstrakcja danych: np. definicja drzewa binarnego... jeśli możemy zdefiniować wierzchołki drzewa: 4 2 1 5 3 jeśli drzewo musimy implementować w tablicach: 1 2 3 2 4 5 3 0 0 4 0 0 5 0 0 Wykład1,str.13 ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń. Przykład: M dla każdego elementu tablicy wydrukować jego indeks i wartość język C for(int i=0; i<dlug TABL; i++) printf("%i:%lf\n", i,tabl[i]); gorzej: obliczenie język PHP foreach($tabl as $ind => $wart) echo" $ind: $wart\n"; lepiej: wyrażone wprost
Wykład1,str.14 ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń. Przykład: M zaprogramować wieże Hanoi 1 2 3 mamy przełożyć wszystkie krążki z pałeczki 1 na pałeczkę 3, używając pomocniczo pałeczki 2, na raz wolno przełożyć tylko jeden krążek, nigdy nie wolno kłaść krążka większego na mniejszy. Wykład1,str.15 ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń. Przykład: M zaprogramować wieże Hanoi zrekursją void Hanoi(int n, inta,intb,intc) { /*nkrążków zpałeczkianapałeczkęc*/ if(n>0) { Hanoi(n-1, a, c, b); przełóżkrążekzanac; Hanoi(n-1, b, a, c); bez rekursji skomplikowane operacje na stosie rekursja poprawia ekspresywność