Nie istnieją żadne absolutne reguły stylu programowania tak samo jak stylu pisania. ponieważ programowanie jest częściowo sztuką, a częściowo nauką.

Podobne dokumenty
Błędy, testowanie i weryfikacja programów Jak napisać bezbłędny program?

Programowanie komputerów

Błędy, testowanie i weryfikacja programów

Styl programowania. Olsztyn Wojciech Sobieski

Programowanie i techniki algorytmiczne

Zapisywanie algorytmów w języku programowania

Definicje. Algorytm to:

ALGORYTMY I PROGRAMY

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Algorytm. Krótka historia algorytmów

Komputer nie myśli. On tylko wykonuje nasze polecenia. Nauczmy się więc wydawać mu rozkazy

Języki programowania zasady ich tworzenia

Podstawy programowania

Temat 20. Techniki algorytmiczne

INFORMATYKA TECHNICZNA Badanie możliwości wykorzystania języka AutoLISP i środowiska VisualLISP w systemie CAx

SCENARIUSZ LEKCJI. Streszczenie. Czas realizacji. Podstawa programowa

Algorytmika i programowanie usystematyzowanie wiadomości

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Technologie informacyjne - wykład 12 -

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Scenariusz lekcji. podać przykłady zalet użycia takiej instrukcji; opisać algorytm obliczania średniej n liczb;

Algorytm. a programowanie -

Wstęp do programowania

Programowanie w języku Python. Grażyna Koba

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści

Język programowania PASCAL

Języki i paradygmaty programowania. I. Wprowadzenie

2.8. Algorytmy, schematy, programy

PASCAL. Etapy pisania programu. Analiza potrzeb i wymagań (treści zadania) Opracowanie algorytmu Kodowanie Kompilacja Testowanie Stosowanie

Sposoby przedstawiania algorytmów

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Być może jesteś doświadczonym programistą, biegle programujesz w Javie,

Ćwiczenie numer 4 JESS PRZYKŁADOWY SYSTEM EKSPERTOWY.

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

PROLOG WSTĘP DO INFORMATYKI. Akademia Górniczo-Hutnicza. Wydział Elektrotechniki, Automatyki, Informatyki i Inżynierii Biomedycznej.

ZAAWANSOWANE JĘZYKI PROGRAMOWANIA

Temat: Programujemy historyjki w języku Scratch tworzymy program i powtarzamy polecenia.

11. Blok ten jest blokiem: a. decyzyjnym b. końcowym c. operacyjnym

Wstęp do Informatyki. Program, proces tworzenia programu Środowisko programistyczne Języki programowania

Programowanie w języku C++ Grażyna Koba

Zapisywanie w wybranej notacji algorytmów z warunkami i iteracyjnych

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Jarosław Kuchta Dokumentacja i Jakość Oprogramowania. Wymagania jakości w Agile Programming

Algorytmika i pseudoprogramowanie

ECDL Podstawy programowania Sylabus - wersja 1.0

Scenariusz lekcji opartej na programie Program nauczania informatyki w gimnazjum DKW /99

Algorytm - pojęcie algorytmu, sposób zapisu, poziom szczegółowości, czynności proste i strukturalne. Pojęcie procedury i funkcji.

Faza Określania Wymagań

biegle i poprawnie posługuje się terminologią informatyczną,

użytkownika 1 Jak wybrać temat pracy 2 Spis treści 3 Część pierwsza problematyka 4 Część druga stosowane metody 5 Część trzecia propozycja rozwiązania

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Zad. 3: Układ równań liniowych

Wykład V. Rzut okiem na języki programowania. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Opis efektów kształcenia dla programu kształcenia (kierunkowe efekty kształcenia) WIEDZA. rozumie cywilizacyjne znaczenie matematyki i jej zastosowań

REPREZENTACJA LICZBY, BŁĘDY, ALGORYTMY W OBLICZENIACH

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Algorytmy, reprezentacja algorytmów.

Wymagania, specyfikacja i projektowanie

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Ogólne zasady projektowania algorytmów i programowania

Temat 5. Programowanie w języku Logo

Programowanie w środowisku Baltie

Podstawy programowania

INFORMATYKA W SZKOLE. Podyplomowe Studia Pedagogiczne. Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227

Kartoteka testu Wyspa Robinsona

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania wykład

Wstęp do programowania INP003203L rok akademicki 2016/17 semestr zimowy. Laboratorium 1. Karol Tarnowski A-1 p.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Technologia informacyjna Algorytm Janusz Uriasz

PROJEKTOWANIE. kodowanie implementacja. PROJEKT most pomiędzy specyfikowaniem a kodowaniem

Czym są właściwości. Poprawne projektowanie klas

Tematy lekcji informatyki klasa 4a luty/marzec 2013

Informatyka. Michał Rad

JĘZYK NIEMIECKI liceum

Witryny i aplikacje internetowe - rozkład godzin dla technikum informatycznego

START. Wprowadź (v, t) S:=v*t. Wyprowadź (S) KONIEC

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

PRZEDMIOTOWE ZASADY OCENIANIA Z JĘZYKA ANGIELSKIEGO I JEZYKA ANGIELSKIEGO W KONWRESACJI w Zespole Szkół Ogólnokształcących nr 1 w Bydgoszczy

Algorytm. Krótka historia algorytmów

Kurs MATURA Z INFORMATYKI

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Spis treści. 1 Java T M

0 + 0 = 0, = 1, = 1, = 0.

KRYTERIA OCENIANIA KLASA I KLASA II KLASA III

3a. Wstęp: Elementarne równania i nierówności

INŻYNIERIA OPROGRAMOWANIA IMPLEMENTACJA KODU

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Język ludzki kod maszynowy

Wstęp do Informatyki dla bioinformatyków

Scenariusz lekcji. rozpoznać prawidłową deklarację tablicy; podać odwołanie do określonego elementu tablicy.

KONSTRUKCJA KOMPILATORÓW

Pierwszy projekt. Na początku warto wspomnieć, że program WebSite X5 dostępy jest w 3 wariantach: Start, Evolution oraz Professional

Lekcja : Tablice + pętle

EGZAMIN W KLASIE TRZECIEJ GIMNAZJUM W ROKU SZKOLNYM 2016/2017

Funkcje i instrukcje języka JavaScript

Etapy życia oprogramowania

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

II Liceum Ogólnokształcące im. Marii Konopnickiej w Radomiu

Transkrypt:

1. Wstęp Programowanie jest sztuką konstruktywną. W jaki sposób należy uczyć się konstruktywnej i twórczej działalności? Jedną z metod jest wyabstrahowanie na podstawie wielu przykładów, zespołu elementarnych zasad tworzenia i przekazanie ich w systematyczny sposób. Jednakże programowanie jest dziedziną wielce zróżnicowaną, często wymagającą złożonej działalności intelektualnej. Przypuszczenie, że kiedykolwiek można by jego naukę skondensować w postaci ścisłych recept wydaje się niesłuszne. Wirth, 1989 Nie istnieją żadne absolutne reguły stylu programowania tak samo jak stylu pisania. ponieważ programowanie jest częściowo sztuką, a częściowo nauką. McCracken, Salmon, 1987 2. Czym jest programowanie? Programowaniem nazywamy ciąg wszystkich czynności związanych z rozwiązywaniem problemów przy użyciu komputera. Programowanie, wbrew częstej opinii, nie jest samym kodowaniem, a więc procesem pisania instrukcji w jakimś języku wyższego poziomu, zrozumiałym przez komputer. Kodowanie poprzedzone jest przez, ogromną często, ilość przygotowań. Sąto: 1. dokładne zdefiniowanie zadania 2. wyjaśnianie i usunięcie nieokreśloności w sformułowaniu problemu 3. wybór sposobu rozwiązania problemu 4. naszkicowanie rozwiązania w zrozumiałym zapisie schemat rozwiązania 5. kodowanie(proces, tak naprawdę, mało twórczy) mechaniczny przekład rozwiązania problemu na poprawne gramatycznie zdania pewnego szczególnego języka(np. Pascala). 6. wyłapanie i usunięcie błędów z napisanego programu odpluskwianie 7. napisanie i uzupełnienie dokumentacji programu 8. dokładne sprawdzenie(wytestowanie) programu Programowanie komputerów jest wyjątkowo złożonym zadaniem, przebiegającymwwieluoddzielnychfazach,zktórychkażdajesttaksamoważnaikażdaw jednakowym stopniu przyczynia się do rozwiązania problemu 2.1. Faza definiowania problemu Częsty błąd programistów polega na tym, że nie całkiem dokładnie definiują zadania programistyczne. Niejasności, które powstają w pierwszej fazie, fazie w formułowania problemu, przenoszą się na cały proces prac programistycznych. 2.2. Szkic rozwiązania Z bardzo niewielkimi wyjątkami naprawdę prostych zadań programistycznych, program składa się najczęściej z wielu oddzielonych ale powiązanych ze sobę zadań. Przykładowo, program obsługi skomplikowanej listy płac może być zbudowany z wielu części, które kolejno sprawdzają dane, porządkują i łączą różnego rodzaju spisy, obliczają i drukują czeki płatnicze, drukują rapporty itp. Ważne jest by precyzyjnie określić zadania dla każdej z tych części programu oraz podać związki między tymi częściami. Zapewnia to, że wykonanie każdej z tych części z osobna doprowadzi do prawidłowo pracującej całości. 1

Tablica 1: JĘZYKI PROGRAMOWANIA I ICH CECHY FORTRAN 1957 num. mat., stat., fiz. ALGOL 1960 num. COBOL 1960 biznes LISP 1961 listy, symb. SNOBOL 1962 łańcuchy, edytory, bibl. BASIC 1965 interaktywny, szkolny PL1 1965 złożony, uniwers. APL 1967 operatory Pascal 1971 og., nauka prog. ADA 1980 ( 1 ) Modula C,C++ po1972 og. ASM zawsze szczeg. Mathematica po 1959 mat., og., symb. Maple Macsyma M 3! HTML(?) Perl SQL 2.3. Wybór i reprezentacja algorytmu Właśnie zostały określone różne zadania i podzadania potrzebne do rozwiązania problemu. Wiemy już jakie informacje muszą zostać dostarczone. Nie wiemy jednak jak program ma rozwiązać postawione zadanie. Algorytm jest szczególnym sposobem rozwiązania problemu. Może to byś sposób już znany, dostępny w literaturze, bibliotekach algorytmów lub algorytm opracowany przez programistę. Z pewnych powodów dobrze jest zapisać rozwiązanie w pewnym schemacie, a nie od razu w jakimś istniejącym języku programowania komputera. Jest to pośredni krok, któremu poświęcimy więcej czasu w póżniejszych częściach wykładu. Zapis schematyczny jest niezależny ani od typu komputera ani od jakiegokolwiek konkretnego języka programowania. 2.4. Kodowanie Po bezbłędnym(prawie niemożliwe) sformułowaniu problemu, zorganizowaniu rozwiązania, naszkicowaniu krok po kroku co powinno być wykonane, można rozważyć rozpoczęcie procesu kodowania. Wybór języka programowania będzie prawdopodobnie zależał od następujących rzeczy: natura problemu dostępność języków programowania na danej maszynie ograniczenia związane z konkretną instalacją komputera Niektóre języki programowania są językami bardziej uniwersalnymi, pewne z nich są zbudowane do bardziej specjalnych celów. Wiele języków jest szeroko dostępnych, ale niektóre mogą być dostępne tylko na pewnych typach komputerów. 2.5. Faza sprawdzania testowanie Otrzymanie newet konkretnych wyników obliczeń nie kończy pracy. Musimy byćichpewni. Należysprawdzić,żewynikijakiedajenaszprogramsądobrew każdym wypadku, nawet takim, który nie był sprawdzony jawnie. Należe w tym celu 2

wybrać takie dane, dla których potrafimy przewidzieć wyniki i dokonać wszelkich możliwych testów programu. 2.6. Dokumentacja Proces dokumentowania programu jest zajęciem ciągłym. Dokumentację programu tworzą wszystkie materiały z etapów poprzednich, a więc szczegółowy opis problemu przedstawienie algorytmiczne zadania program jako taki Dokumentacja powinna zawierać zarówno informacje dla użytkownika jak i dla programistów, którzy ewentualnie w przyszłości będą dokonywać zmian w kodzie programu(bywa tak, że jest ta sama osoba!). 2.7. Konserwacja i dostosowywanie Program nie jest czymś stałym. Jest to narzędzie, które należy poprawiać(błędy w różnych fazach jego powstawania), dostosowywać do aktualnej sytuacji: różnice w konfiguracji sprzętu komputerowego, różne urządzenia wejścia-wyjścia, różnice w realizacji języków programowania dla różnych maszyn, itp. Starsze realizacje(wersje) programów, które są uaktualniane, należy uzupełnić o nowe informacje w ich dokumentacji. Każda interwencja w gotowy program powinna zakończyć się dokładną informacją na ten temat. Tylko dobrze zorganizowane programy, z przejrzystą o nich dokumentacją, mają szanse na przetrwanie. 2.8. Podsumowanie Z tego co zostało powiedziane wynika, że programowanie nie jest prostym, liniowym procesem w wyniku którego zawsze powstaje dobry program. Wiele kroków podczas jego realizacji pokrywa się, inne są ciągle powtarzane. Przykładem może być proces odpluskwiania czyli proces wychwytywania i usuwania wszelkiego typu błędów, które zostały popełnione na różnych etapach programowania(po angielsku debuging), proces poprawiania dokumentacji, itp. Szybko można nauczyć się kodowania, czyli przepisywania programu w języku zrozumiałym dla komputera, ale być dobrym programistą oznacza o wiele więcej. Jest to bowiem zrozumienie i stosowanie reguł z całego widma zagadnień związanych z programowaniem. Wymaga to aktywnej nauki i długiej, często wieloletniej, praktyki. 2.9. Czas Można w przybliżeniu podać przybliżony czas(w procentach) potrzebny na wykonanie poszczególnych kroków, opisanych wyżej. Definiowanie, analiza wymagań użytkownika: 10% Określenie funkcjonalności(analiza zasobów systemowych, szkic dokumentacji, przewodnik użytkownika(pomaga w całym procesie pisania programu i jego konserwacji), analiza możliwych błędów i opis jak na nie należy reagować, itd: 30% Projektowanie programu(wybór typów danych, algorytmu, podział programu na fragmenty, itd.: 20% Kodowanie lub wykonywanie programu(zapisywanie projektu w języku wyższego poziomu(pascal, C++, itd.) 15% 3

Sprawdzanie poprawności(kompilacja, usuwanie błędów, wykonanie obliczeń z danymi, które prowadzą do znanych wyników, z danymi błędnymi, przypadkowymi i rzeczywistymi): 15% Instalacja(umieszczenie programu na komputerze klienta, innym niż ten, na którym został przygotowany,(może to być komputer asystenta, który zalicza ćwiczenia), szkolenie personelu obsługującego program itd.): 10% Konserwacja programu(usługi gwarancyjne, inne błędy, usuwanie problemów związanych z nowym sprzętem itd.) Ocenia się, że stanowi to 50 90% całości czasu poświęconego projektowi. Powyższe dane zostały zaczerpnięte z książki McCrackena i Salmona. Proszę zwrócić uwagę jak mało czasu poświęca się średnio na samo kodowanie, a więc na to co błędnie interpretujemy często jako programowanie. 2.10. Co jest ważne w procesie programowania? Przewodnik użytkownika; komentarze. Jest on potrzebny w całym procesie pisania programu i po jego uruchomieniu. Wczesne wykrywanie błędów. Wykrycie błędu po zainstalowaniu programu może kosztować o wiele więcej niż budowa całego programu. Przykładem, z dziedziny nauki, jest teleskop Hubble a, który naprawiano w przestrzeni kosmicznej, z powodu nieprzewidzianych wcześniej zjawisk. Proces budowy programu jest procesem cyklicznym. Zawsze powtarza się wcześniej wykonane kroki aby przejść do następnej fazy. Czas tworzenia programów zależy od stopnia komplikacji problemu i często jest długi. Warto czynić pisemne uwagi o postępach w budowaniu programu. Pomaga to szybciej wrócić do problemu i przypomnieć o tym co jeszcze należy zrobić. Pamięć ludzka zawodzi. Dokumentacja jest rzeczą podstawową. 3. Charakterystyka dobrych programów Oto kilka cech uważanych za takie, które charakteryzują dobry program. Poprawność(zgodność z wymogami użytkownika) Niezawodność(dobre dane wejściowe-> dobre wyniki) Przenośność(Łatwość instalacji na różnych komputerach) Łatwość konserwacji(prosto napisany program łatwo przystosować do różnych warunków pracy) Czytelność(Prostota jest jedną z najważniejszych cech dobrych programów) Prawidłowe wykorzystanie zasobów(pamięci, dyski, itp), szybkość 3.1. Styl programowania Rozdział ten wymaga znajomości procesu programowania jak też znajomości języka wyższego poziomu i może być opuszczony przy pierwszym czytaniu. RozważaniasąopartenapracyMcCrackenaiSalmonaz1987roku. Styl programowania jest często indywidualną sprawą programisty, ale powinien też spełniać pewne reguły ogóle. Dotyczą one następujących spraw. Nazwy zmiennych w programie. Wielkości stałe. Liczba zmiennych globalnych, dostępnych wszędzie w programie. Deklaracje typów zmiennych. Odstępy, puste linie, akapity. Inteligentne komentarze. Podział na sekcje, podprogramy. 4

Postaram się kolejno omówić zasygnalizowane problemy. Nazwy zmiennych w programie. Dobrze jest stosować rzeczowniki dla oznaczania nazw wszelkich danych, czasowniki dla funkcji i procedur(rozkazy, np. dziel, dodaj itp), przymiotniki dla zmiennych logicznych(w Pascalu boolean). Jednolite nazwy są mało czytelne. Najlepiej jest używać nazw, które coś oznaczają, powiadamiając tym samym użytkownika(intencjonalnie) o możliwościach funkcji czy procedury, czy też wskazując sens zmiennych, itd. Nazwy bardzo długie, chociaż mogą być komunikatywne, są mało praktyczne jeśli nie stosujemy wyróżnień takich jak duże litery czy podkreślenie(underscore) np. nazwa dodajdwieliczby jest mniej czytelna od nazwy DodajDwieLiczby lub od nazwy dodaj_dwie_liczby. Wielkości stałe. Z wyjątkiem zera, jedynki i może jeszcze kilku innych stałych, nie należy wprost używać stałych w całej treści programu, w jego wnętrzu. Najlepiej zadeklarować(zgłosić) je w części opisowej, specjalnie do tego przeznaczonej, np. za pomocą słowa Pascala const. Zmiana sprzętu często powoduje idące za nią zmiany przybliżonych wartości różnych stałych. Ile czasu zmarnujemy wyszukując w programie miejsca, w których występuje stała π zapisana jako liczba zmiennoprzecinkowazdokładnościądo9miejscznaczącychbyzamienićjąnaliczbęo12miejscach znaczących. Nie używajmy gołych stałych! Powiedzmy, że w programie używamy tablicy, której rozmiar 100 zgłosiliśmy kilkakrotnie pisząc między innymi ciąg znaków [1..100]. Załóżmy, że zmienimy wymiar 100 wszędzie, automatycznie, za pomocą edytora tekstu, na 200, a przy okazji, całkiem nieświadomie, zamienimy temperaturę jakiegoś procesu też na 200, ale stopni. Co się wtedy stanie? Liczba zmiennych globalnych. Należy minimalizować liczbę zmiennych globalnych, dostępnych z całego programu. Zmiany w procedurach czy funkcjach, których jest wiele w programach, są zmianami lokalnymi. Często zapominamy przy nich o zmiennych globalnych. W ten sposób łatwo o błędy. Deklaracje typów zmiennych. Wszystko, co tylko się da, należy umieszczać w deklaracjach type, włączając w to podzakresy, definicje tablic oraz rekordów. Odstępy, puste linie, akapity. Należy używać odstępów, pustych linii i akapitów. Puste linie(jedna, dwie) POWINNY! oddzielać różne fragmenty programu i podprogramy. Akapitów używamy w instrukcjach złożonych. Należy do dobrego tonu podpatrzenie jak radzą sobie z tym inni. Decydując się na jakiś styl trzymajmy się go zawsze. Nie mieszajmy różnych stylów. Programy tracą wtedy na czytelności. Z czasem praktyka pokaże, że trzymanie się jednego stylu opłaca się. Tymczasem należy się do tego przyzwyczajać. Inteligentne komentarze. Nie należy pisać komentarzy w miejscach, które są oczywiste i jasne. Przesadne używanie komentarzy może oznaczać, że programista nie bardzo wiedział co czyni. Np. komentarz{tutaj pod zmienną x podstawiamy 7}, uczyniony w miejscu x := 7 jest niepoprawne. Podział na sekcje, podprogramy. Program zbudowany jest z części: funkcje i procedury, z których każda ma konkretne zadanie. Zadanie dzielimy na kawałki i następnie proste, zrozumiałe części programu łączymy razem. Jest to realizacja zasady dziel i rządź. Proces ten zwie się też modularyzacją(część to moduł). Należy zadbać o spójność modułów. McCracken i Salmon piszą, że jeśli uda się znaleźć słowookreślającetocorobidanymoduł,towłaśnietenfaktoznacza,żefunkcjata jest spójna, koherentna. 5

Drugą cechą modularyzacji jest przejrzystość komunikacji(lub transmisji). Polegatonatym,żemodułymogąwprostysposóbkomunikowaćsięmiędzysobą, używając przy tym minimalnej liczby zmiennych globalnych. Powtórzmy. Thereisnoabsoluterulesofprogrammingstylejanymorethantherecan be absolute rules of style for any other kind of writing, since programming ispartlyanartandpartlyascience McCracken, Salmon, 1987 6