Stefan Sokołowski ZAAWANSOWANEJĘZYKI PROGRAMOWANIA Inst. Informatyki, UG Gdańsk, 2016/2017
Zaawansowane Języki Programowania Wykład1,str.1 Na http://inf.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.
Zaawansowane Języki Programowania Wykład1,str.1 Na http://inf.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.
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) naconajmniej51% 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
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,...
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.
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.
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,...
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 Człowiek kulturalny zamienia się w bestię w trzech przypadkach:...
Wykład1,str.4 Człowiek kulturalny zamienia się w bestię w trzech przypadkach: kiedysiadazakierownicęsamochodu,...
Wykład1,str.4 Człowiek kulturalny zamienia się w bestię w trzech przypadkach: kiedy siada za kierownicę samochodu, kiedyjegodrużynagraważnymecz,...
Wykład1,str.4 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.5 czytelność programów
Wykład1,str.5 czytelność programów pisalność (łatwość pisania) programów
Wykład1,str.5 czytelność programów pisalność (łatwość pisania) programów niezawodność programów
Wykład1,str.5 czytelność programów pisalność (łatwość pisania) programów niezawodność programów koszty
Wykład1,str.6 Czytelność programów rozumienie kodu praca wspólna pielęgnacja
Wykład1,str.6 Czytelność programów 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
Wykład1,str.6 Czytelność programów 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 n=n+1; n+=1;
Wykład1,str.6 Czytelność programów 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;
Wykład1,str.6 Czytelność programów 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ść
Wykład1,str.6 Czytelność programów 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 Czytelność programów rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego
Wykład1,str.7 Czytelność programów 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
Wykład1,str.7 Czytelność programów 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 Czytelność programów rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego
Wykład1,str.8 Czytelność programów 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
Wykład1,str.8 Czytelność programów 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 Czytelność programów rozumienie kodu praca wspólna pielęgnacja ortogonalność pojęć ogólne zasady, stosowalne w ten sam sposób do wszystkiego
Wykład1,str.9 Czytelność programów 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ść.
Wykład1,str.9 Czytelność programów 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 Czytelność programów 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);
Wykład1,str.10 Czytelność programów 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); 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"
Wykład1,str.10 Czytelność programów 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 Łatwość pisania programów prostota i ortogonalność: duża liczba gotowych konstrukcji trudno się ich nauczyć i łatwo użyć błędnie
Wykład1,str.11 Łatwość pisania programów 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
Wykład1,str.11 Łatwość pisania programów 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 Łatwość pisania programów abstrakcja możliwość definiowania złożonych danych i operacji i używania ich bez pamiętania szczegółów definicji
Wykład1,str.12 Łatwość pisania programów 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
Wykład1,str.12 Łatwość pisania programów 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 Łatwość pisania programów ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń.
Wykład1,str.13 Łatwość pisania programów 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]);
Wykład1,str.13 Łatwość pisania programów 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]); język PHP foreach($tabl as $ind => $wart) echo" $ind: $wart\n";
Wykład1,str.13 Łatwość pisania programów 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 Łatwość pisania programów ekspresywność łatwość wyrażenia w języku pojęć potrzebnych do obliczeń.
Wykład1,str.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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.14 Łatwość pisania programów 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 Łatwość pisania programów 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); } }
Wykład1,str.15 Łatwość pisania programów 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); } } rekursja poprawia ekspresywność bez rekursji skomplikowane operacje na stosie
Wykład1,str.16 Niezawodność sprawdzanie typu
Wykład1,str.16 Niezawodność sprawdzanie typu: Przykład: M printf("witam!\n"+1); bez sprawdzania typów: itam! ze sprawdzaniem typów: sygnał błędu
Wykład1,str.16 Niezawodność sprawdzanie typu: Przykład: M printf("witam!\n"+1); bez sprawdzania typów: itam! ze sprawdzaniem typów: sygnał błędu Przykład: M printf("%i\n",10.0); bez sprawdzania typów: 1624615624 (C daje ostrzeżenie) ze sprawdzaniem typów: sygnał błędu
Wykład1,str.17 Niezawodność reakcja na wyjątki(błędy wykonania)
Wykład1,str.17 Niezawodność reakcja na wyjątki(błędy wykonania): Przykład: M double srednia(int N, double tab[n]) { doublesuma=0.0; for(inti=0;i<n;i++) suma+=tab[i]; return suma/n; }
Wykład1,str.17 Niezawodność reakcja na wyjątki(błędy wykonania): Przykład: M double srednia(int N, double tab[n]) { doublesuma=0.0; for(inti=0;i<n;i++) suma+=tab[i]; return suma/n; } Co zmienić, żeby program sensownie reagował na sytuację, gdy N = 0?
Wykład1,str.17 Niezawodność reakcja na wyjątki(błędy wykonania): Przykład: M double srednia(int N, double tab[n]) { doublesuma=0.0; for(inti=0;i<n;i++) suma+=tab[i]; return suma/n; } Co zmienić, żeby program sensownie reagował na sytuację, gdy N = 0? bez obsługi wyjątków: przebudować funkcję srednia, albo zgodzić się, że program czasem padnie
Wykład1,str.17 Niezawodność reakcja na wyjątki(błędy wykonania): Przykład: M double srednia(int N, double tab[n]) { doublesuma=0.0; for(inti=0;i<n;i++) suma+=tab[i]; return suma/n; } Co zmienić, żeby program sensownie reagował na sytuację, gdy N = 0? bez obsługi wyjątków: przebudować funkcję srednia, albo zgodzić się, że program czasem padnie z obsługą wyjątków: zaprogramować własną reakcję
Wykład1,str.18 Niezawodność unikanie aliasów
Wykład1,str.18 Niezawodność unikanie aliasów: Przykład: M inta;int b=&a; a=0; b=1; printf("a==%i\n",a);
Wykład1,str.18 Niezawodność unikanie aliasów: Przykład: M inta;int b=&a; a=0; b=1; printf("a==%i\n",a); Drukuje: 1, chociaż wartość zmiennej a nie została jawnie zmieniona.
Wykład1,str.18 Niezawodność unikanie aliasów: Przykład: M inta;int b=&a; a=0; b=1; printf("a==%i\n",a); Drukuje: 1, chociaż wartość zmiennej a nie została jawnie zmieniona. Aliasy pozwalają na niejawną zmianę wartości, a to prowadzi do błędów.
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu)
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu) koszt kompilacji programu(zależy od prostoty języka i jakości kompilatora)
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu) koszt kompilacji programu(zależy od prostoty języka i jakości kompilatora) koszt napisania programu(zależy od łatwości pisania)
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu) koszt kompilacji programu(zależy od prostoty języka i jakości kompilatora) koszt napisania programu(zależy od łatwości pisania) koszt pielęgnacji programu(zależy od czytelności)
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu) koszt kompilacji programu(zależy od prostoty języka i jakości kompilatora) koszt napisania programu(zależy od łatwości pisania) koszt pielęgnacji programu(zależy od czytelności) koszt zawodności programu
Wykład1,str.19 Koszt stworzenia programu pielęgnacji niezawodności koszt każdorazowego wykonania programu(zależy od natury zagadnienia i jakości stosowanego algorytmu) koszt kompilacji programu(zależy od prostoty języka i jakości kompilatora) koszt napisania programu(zależy od łatwości pisania) koszt pielęgnacji programu(zależy od czytelności) koszt zawodności programu koszt nauczenia się języka(zależy od jego prostoty i ortogonalności)
Co kształtuje języki programowania? Wykład1,str.20 Architektura komputera(bardzo uproszczona)
Co kształtuje języki programowania? Wykład1,str.20 Architektura komputera(bardzo uproszczona) 0 1 2 3 4 5 PAMIĘĆ n 1 Komputer von Neumanna: bierna pamięć adresowana(numerowana); w niej rozkazy i dane
Co kształtuje języki programowania? Wykład1,str.20 Architektura komputera(bardzo uproszczona) 0 1 2 3 4 5 PAMIĘĆ PROCESOR licz. rozkazów rejestr arytm. n 1 Komputer von Neumanna: bierna pamięć adresowana(numerowana); w niej rozkazy i dane; czynnyprocesor
Co kształtuje języki programowania? Wykład1,str.20 Architektura komputera(bardzo uproszczona) PAMIĘĆ PROCESOR 0 licz. rozkazów 1 2 3...... rejestr arytm. 4 5 n 1 Komputer von Neumanna: bierna pamięć adresowana(numerowana); w niej rozkazy i dane; czynnyprocesor: licznik rozkazów wskazuje adres rozkazu do wykonania
Co kształtuje języki programowania? Wykład1,str.20 Architektura komputera(bardzo uproszczona) PAMIĘĆ PROCESOR 0 licz. rozkazów 1 2 3 4 5............... rejestr arytm..... n 1 Komputer von Neumanna: bierna pamięć adresowana(numerowana); w niej rozkazy i dane; czynnyprocesor: licznik rozkazów wskazuje adres rozkazu do wykonania, działania wykonują się między rejestrem a komórką pamięci.
Co kształtuje języki programowania? Wykład1,str.20 Architektura komputera(bardzo uproszczona) PAMIĘĆ PROCESOR 0 1 2 3 4 5............. licz. rozkazów.. rejestr arytm..... WEJŚCIE/WYJŚCIE n 1 Komputer von Neumanna: bierna pamięć adresowana(numerowana); w niej rozkazy i dane; czynnyprocesor: licznik rozkazów wskazuje adres rozkazu do wykonania, działania wykonują się między rejestrem a komórką pamięci.
Co kształtuje języki programowania? Wykład1,str.21 Architektura komputera(bardzo uproszczona) Komputer von Neumanna: inicjalizuj licznik rozkazów; while(prawda) { /*czylibezkońca*/ pobierz instrukcję spod adresu w liczn.rozk.; zwiększ liczn.rozk. o 1; wykonaj pobraną instrukcję; }
Co kształtuje języki programowania? Wykład1,str.21 Architektura komputera(bardzo uproszczona) Komputer von Neumanna: inicjalizuj licznik rozkazów; while(prawda) { /*czylibezkońca*/ pobierz instrukcję spod adresu w liczn.rozk.; zwiększ liczn.rozk. o 1; wykonaj pobraną instrukcję; } Taka architektura powoduje, że programowanie imperatywne(rozkazy dla komputera, jeden po drugim) jest bardziej naturalne dla komputera chociaż nie dla człowieka.