Zarządzanie kodem projektu. Tworzenie i utrzymywanie czystego kodu Paweł Stroiński,

Wielkość: px
Rozpocząć pokaz od strony:

Download "Zarządzanie kodem projektu. Tworzenie i utrzymywanie czystego kodu Paweł Stroiński,"

Transkrypt

1 Zarządzanie kodem projektu Tworzenie i utrzymywanie czystego kodu Paweł Stroiński,

2 Plan prezentacji Wprowadzenie Definicja czystego kodu Dobre nazwy w kodzie Zrozumiały kod funkcji Komentowanie kodu jest przereklamowane Formatowanie kodu to nie problem Obiekty i struktury danych w czystym kodzie Zakończenie

3 Wprowadzenie Rola czystego kodu w zarządzaniu projektem informatycznym Książka Zalety tej prezentacji w porównaniu do książki

4 Rola czystego kodu w zarządzaniu projektem informatycznym Nic nie ma tak głębokiego i w długim czasie degradującego wpływu na prowadzenie projektu, jak zły kod. Złe harmonogramy mogą być zmodyfikowane, złe wymagania przedefiniowane. Złą dynamikę zespołu da się poprawić. Jednak zły kod psuje się, stając się coraz większym ciężarem dla zespołu. Widziałem wiele zespołów, które się rozsypywały, ponieważ w pośpiechu tworzyły złośliwe bagnisko kodu, który na zawsze zdeterminował ich przeznaczenie. ( ) Tak więc rozwiązaniem jest ciągłe zachowywanie czystości i maksymalnej prostoty kodu. Nigdy nie pozwalajmy, by zaczął się psuć.

5 Książka Czysty kod. Podręcznik dobrego programisty Robert C. Martin

6 Zalety (wady) tej prezentacji w porównaniu do książki Jest mniej kodu Trwa krócej niż przeczytanie książki Z powodu ograniczeń czasowych obejmuje Z powodu ograniczeń czasowych obejmuje około ½ (pierwszą połowę) książki

7 Definicja czystego kodu elegancki i efektywny prosty i bezpośredni można go łatwo zmienić posiada testy minimalny opisywany ktoś się nim przejął taki jakiego się spodziewaliśmy nie czyni go język a programista

8 Dobre nazwy w kodzie przedstawiają intencje bez mylących i fałszywych wskazówek bez zbyt subtelnych różnic są spójne i dobrze się sortują w IDE można je wymówić! łatwo je wyszukać bez kodowania typów bez przedrostków składników bez kodowania interfejsów bez jedno-literówek nazwy klas mają rzeczowniki nazwy metod mają czasowniki zamiast przeciążonych konstruktorów stosujemy metody fabryk dowcipne nazwy mogą nie być zrozumiane spójny leksykon bez przesady ze spójnością używamy terminologii informatycznej w drugiej kolejności używamy terminologii klienta dodajemy znaczący kontekst bez nadmiarowego kontekstu zmiana nazwy na czytelniejszą to nic złego

9 przedstawiają intencje int c; int studentscount; List<int> list1 = new List<int>(); List<int> temperaturevalues = new List<int>();

10 bez mylących i fałszywych wskazówek int hp; // hiperprzelicznik Student[] studentlist; List<Student> studentlist; List<Student> students; Student[] students;

11 bez zbyt subtelnych różnic Student VeryGoodStudentInThisCourseOfPhysics; Student VeryGoodStudentInThatCourseOfPhysics; void copystudents(student[] a1, Student[] a2) void copystudents(student[] source, Student[] destination) Student student; Student astudent; Student thestudent; int ECTS; int ECTSpoints; string TitleString; class StudentObject

12 są spójne i dobrze się sortują w IDE

13 można je wymówić! Nasze mózgi lubią mowę. Żeby możliwa była dyskusja o kodzie. Żeby nowe osoby w zespole rozumiały kod. class SdntRcrd126 { private DateTime admymdhms; private const string pszqint = "126"; } class Student { private DateTime admissiontimestamp; private const string recordid = "126"; }

14 łatwo je wyszukać, stałe zamiast liczb if (s.count > 9) const int MAX_STUDENTS_PER_YEAR = 9; if (students.count > MAX_STUDENTS_PER_YEAR)

15 bez kodowania typów int securitycodestring; //kiedyś ta zmienna może i była typu string

16 bez przedrostków składników Najnowsze IDE wyróżniają zmienne składowe. Czytając kod i tak ignorujemy przedrostki. W małych klasach i funkcjach są zbędne. class Student { private String m_name; void setname(string name) { m_name = name; } } class Student { private String name; void setname(string name) { this.name = name; } }

17 bez kodowania interfejsów (lepszy przyrostek Imp / Impl ) interface IComputerStudent interface ComputerStudent class ComputerStudentImp : ComputerStudent

18 bez jedno-literówek, które trzeba sobie potem tłumaczyć Uri r = new Uri(" Może dla nas nie problem to zapamiętać, ale profesjonaliści piszą kod zrozumiały dla innych Wyjątkiem są liczniki pętli ale tylko i, j i k for (int i = 0; i < 4; i++) for (int j = 0; j < 4; j++) for (int k = 0; k < 4; k++)

19 nazwy klas mają rzeczowniki class Course class CourseAdvisor class Advise class Advice Unikamy mowy-trawy jak np. Manager, Processor, Data, Info class CourseProcessor

20 nazwy metod mają czasowniki counter.submit(); get przed akcesorami, set przed mutatorami, is przed predykatami if (course.iscompleted()) totalcompletedhours += course.gettotalhours(); counter.settotal(totalcompletedhours);

21 zamiast przeciążonych konstruktorów stosujemy metody fabryk o nazwach pochodzących od argumentów, np. City.FromName( Łódź ) tworzy obiekt City z nazwą Łódź City lodz = new City("Łódź"); City lodz = City.FromName("Łódź");

22 dowcipne nazwy mogą nie być zrozumiane

23 spójny leksykon jedno słowo na zagadnienie if (ListenerManager.retrieveCurrent() == StudentController.getActual())

24 bez przesady ze spójnością jedno zagadnienie na słowo course.title = "C#"; student.title = "Wiesław Czyżewski";

25 używamy terminologii informatycznej z tzw. dziedziny rozwiązania Możemy swobodnie stosować terminy informatyczne (jak nazwy algorytmów czy wzorców) bo czytelnicy kodu programiści je znają

26 w drugiej kolejności używamy terminologii klienta z tzw. dziedziny problemu Tylko jeśli nie mamy na dane pojęcie terminu technicznego Gdy istnieją dwa terminy w języku klienta na jedno pojęcie, stosujemy tylko jeden termin Im bardziej kod jest z koncepcji dziedziny problemu, tym częściej należy stosować jej terminy

27 dodajemy znaczący kontekst (wydzielamy klasy i funkcje!) name = "Wiesław Czyżewski"; id = 15640; student.name = "Wiesław Czyżewski"; student.id = 15640; public Course advisecourse() { if (student.likesmath()) { if (student.knowshowtoadd) public Course advisecourse() { if (student.likesmath()) return advisemathcourses();

28 bez nadmiarowego kontekstu jako wspólnego przedrostka na aplikację/moduł class XYZAPPStudent class XYZAPPCourse class StudentAddress class LecturerAddress class Address

29 zmiana nazwy na czytelniejszą to nic złego (refactoring) I tak korzystamy z podpowiedzi IDE nie pamiętając większość nazw

30 Zrozumiały kod funkcji (1) bardzo krótkie (najlepiej tylko 2 4 wiersze a maksymalnie 20) bloki w instrukcjach warunkowych i pętlach mają po jednym wierszu często wywołujemy kolejne funkcje o opisowych nazwach struktura prosta, bez zagnieżdżeń, czyli maksymalnie 2 wcięcia złota zasada: FUNKCJE POWINNY WYKONYWAĆ JEDNĄ OPERACJĘ. POWINNY ROBIĆ TO DOBRZE. POWINNY ROBIĆ TYLKO TO aby kod czytało się jak artykuł prasowy (piramidę od ogółu do szczegółu ) bezpośrednio pod funkcją znajdują się funkcje będące od niej o jeden poziom abstrakcji niżej

31 Zrozumiały kod funkcji (2) ukrywamy instrukcje switch w podstawie fabryki abstrakcyjnej, używając polimorfizmu jak najmniej argumentów (najlepiej zero, 3 w ostateczności) typy funkcji jednoargumentowych argumenty przekazujące true/false są złe. lepiej podzielić na osobne funkcje dla true i false funkcje dwuargumentowe są trudniejsze do zrozumienia niż jednoargumentowe, dlatego często warto zrezygnować z jednego z argumentów korzystając z klas gdy funkcja potrzebuje więcej niż 2 argumentów możliwe, że powinniśmy część z nich umieścić w osobnej klasie

32 Zrozumiały kod funkcji (3) listy argumentów jak w funkcji printf są w porządku nawet jeśli pozornie przekazujemy ich np. 5, bo tak samo traktujemy wszystkie argumenty z listy argumentów kodujmy porządek i przeznaczenie argumentów w nazwie funkcji, tworząc pary czasownik- rzeczownik, np. write(name) zamieniamy na writefield(name), a assertequals(expected, actual) zamieniamy na assertexpectedequalsactual(expected, actual)! funkcje powinny być bez efektów ubocznych, ponieważ powoduje to naruszenie zasady wykonywania jednej operacji oraz generuje sprzężenie czasowe które jest niebezpieczne (jeśli już sprzężenie czasowe jest nie do uniknięcia to powinno być podane w nazwie funkcji)

33 Zrozumiały kod funkcji (4) funkcja nie powinna jednocześnie czegoś robić i sprawdzać coś zwracając jakąś wartość, nawet typu true/false należy w tym przypadku zrobić osobne funkcje rozdzielić polecenie od zapytania zawartość bloków try-catch warto wyodrębniać do osobnych funkcji, które zajmują się tylko wywołaniem kłopotliwej funkcji owiniętym w blok try-catch zasada DRY: nie powtarzaj się, bo to źródło wszelkiego zła w oprogramowaniu najłatwiej wyeliminować powielanie tego samego kodu w dwóch metodach tworząc nową metodę z tym kodem pisanie zrozumiałych funkcji

34 często wywołujemy kolejne funkcje o opisowych nazwach (sama tworzy się dokumentacja!) dla małych funkcji łatwiej o precyzyjną nazwę nie bójmy się długich nazw próbujmy różnych nazw spójne nazwy, opowiadające historię

35 złota zasada: FUNKCJE POWINNY WYKONYWAĆ JEDNĄ OPERACJĘ. POWINNY ROBIĆ TO DOBRZE. POWINNY ROBIĆ TYLKO TO czy kod ma tylko jeden poziom abstrakcji (tuż pod poziomem abstrakcji nazwy funkcji)? czy da się z niego jeszcze coś sensownego wyodrębnić? czy da się go sensownie podzielić na sekcje?

36 ukrywamy instrukcje switch w podstawie fabryki abstrakcyjnej, używając polimorfizmu public decimal getmonthtuitionfee (Student student) { switch (student.type) { case StudentType.Day: return 0; case StudentType.Evening: return 250; public decimal getyeartuitionfee (Student student) abstract public class Student { abstract public decimal getmonthtuitionfee(); abstract public decimal getyeartuitionfee(); public interface StudentFactory { Student makestudent(studentrecord r); public class StudentFactoryImpl : StudentFactory { public Student makestudent(studentrecord r) { switch (r.type) { case StudentType.Day: return new DayStudent(); case StudentType.Evening: return new EveningStudent();

37 typy funkcji jednoargumentowych zadajemy pytanie na temat argumentu, np. fileexists( wykład.doc ) operujemy na argumencie, przekształcając go w coś innego i zwracając(!) wynik, np. fileopen( wyklad.doc ) zdarzenia wykorzystujące argumenty do zmiany stanu systemu, ale niczego nie zwracające, np. passwordattemtfailedntimes(int attemps) nie należy nadużywać innych typów unikać, np. nie używać argumentu wyjściowego zamiast zwracanej wartości, poza tym jeżeli funkcja musi zmieniać stan czegokolwiek, powinna zmieniać stan własnego obiektu

38 funkcje dwuargumentowe są trudniejsze do zrozumienia niż jednoargumentowe, dlatego często warto zrezygnować z jednego z argumentów korzystając z klas: można przenieść dwuargumentową metodę do klasy jednego z argumentów można umieścić jeden z argumentów w zmiennej składowej bieżącej klasy można wyodrębnić nową klasę i jeden z argumentów przekazywać jej w konstruktorze

39 funkcja nie powinna jednocześnie czegoś robić i sprawdzać coś zwracając jakąś wartość, nawet typu true/false należy w tym przypadku zrobić osobne funkcje rozdzielić polecenie od zapytania subtelnym przykładem jest stosowanie kodów błędów nie należy tego robić, od tego są wyjątki stosowanie kodów błędów zamiast mechanizmu wyjątków znacznie komplikuje kod

40 zawartość bloków try-catch warto wyodrębniać do osobnych funkcji, które zajmują się tylko wywołaniem kłopotliwej funkcji owiniętym w blok try-catch w ten sposób nie mieszamy przetwarzania błędów ze zwykłym przetwarzaniem obsługa błędów już jest jedną operacją (patrz obsługa błędów już jest jedną operacją (patrz złota zasada) więc jeżeli w funkcji jest słowo try, to powinno ono być jej pierwszym słowem, a funkcja powinna kończyć się na bloku catch/finally!

41 zasada DRY: nie powtarzaj się, bo to źródło wszelkiego zła w oprogramowaniu powtarzanie powoduje rozdęcie kodu wymaga wielokrotnych modyfikacji zwiększa możliwość popełnienia błędu

42 pisanie zrozumiałych funkcji pierwszy szkic funkcji jest często zbyt długi, skomplikowany, ma wiele wcięć, zagnieżdżonych pętli i argumentów, o dowolnych nazwach i powielonym kodzie należy wydzielać funkcje, zmieniać nazwy, eliminować powtórzenia, zmniejszać metody i je przestawiać, a czasem nawet wyodrębniać całe klasy

43 Komentowanie kodu jest przereklamowane Nie trać czasu na komentowanie złego kodu. Popraw go Przykład: zamiast pisać komentarz objaśniający czynność, umieść tę czynność w nowej, dobrze nazwanej funkcji Wyjątki od reguły kiedy można komentować Reguła złe komentarze

44 Wyjątki od reguły kiedy można komentować (1) copyright u góry pliku (cytować licencję tylko z nazwy) komentarz informacyjny, np. obok wyrażenia regularnego w komentarzu jest akceptowany format tłumaczymy się z naszych decyzji jak coś ma działać (wyjaśnianie zamierzeń), np.: zasady sortowania w funkcji porównującej w nietypowym przypadku cel użycia absurdalnie dużej pętli w przypadku testowym komentarze objaśniające zastosowanie niejasnego kodu z biblioteki standardowej lub innej której innej nie możemy zmienić aby jej zastosowanie było czytelniejsze

45 Wyjątki od reguły kiedy można komentować (2) komentarze ostrzegające o tym co by było gdybyśmy zmienili kod w narzucający się sposób np. dlaczego wyłączyliśmy przypadek testowy (bo jest czasochłonny) dlaczego w statycznej metodzie inicjalizujemy zmienną lokalną niestatycznie (bo nie jest bezpieczna dla wątków) komentarze TODO mówiące o rzeczach do zrobienia w danym miejscu kodu, pod warunkiem że są regularnie przeglądane i usuwane komentarze podkreślające wagę naprawdę istotnych operacji, które pozbawione komentarza wydają się niekonsekwencją i ktoś mógłby je usunąć (np. wywołanie funkcji Trim()) komentarze służące do generowania dokumentacji publicznego API, pod warunkiem że są rzeczywiście dobre

46 Reguła złe komentarze (1) Jeśli musimy przeglądać inne moduły żeby zrozumieć komentarz to jest to bełkot Komentarze powtarzające kod Z natury rzeczy są mniej precyzyjne niż kod bo język naturalny jest mniej precyzyjny niż kod (mogą więc być mylące), a dłużej się je czyta niż klarowny kod Nie dodają żadnej informacji, tylko zaciemniają kod Dezinformujące komentarze (np. mówiące tylko część prawdy, nieprecyzyjne) Wymaganie komentarzy np. dla wszystkich funkcji lub zmiennych bo tak i już zaciemniają kod, powstają powszechne pomyłki i dezorganizacja Dzienniki zmian na początku modułu pogarszają jego czytelność od tego są logi SVN

47 Reguła złe komentarze (2) Szum informacyjny Np. komentowanie konstruktora domyślnego konstruktor domyślny Szum informacyjny jest ignorowany automatycznie przez czytających, przez co może stać się nieaktualny i mylący Kiedy mamy ochotę napisać komentarz będący szumem informacyjnym, lepiej przeznaczyć tę chwilę na wyczyszczenie kodu Komentarz będący dokumentacją publicznego API sprowadzający się do powtarzania nazw z kodu to straszny szum Komentarz objaśniający nieczytelny kod który można zamienić na wyodrębnienie funkcji lub dodanie kilku zmiennych uczytelniając kod Rzucające się w oczy nagłówki typu // Nagłówek ///////////////////////////////////////// (znaczniki pozycji, transparenty) przydatne bardzo rzadko i jeśli już to bez tych ukośników na końcu. Powinny być używane oszczędnie tylko gdy są naprawdę potrzebne

48 Reguła złe komentarze (3) Komentowanie klamry zamykającej informując co było przy klamrze otwierającej 2 kilometry wcześniej. Przecież mamy krótkie funkcje, po co nam to? Komentarze oznaczające autorstwo dopisanych fragmentów kodu (śmieci które później zalegają w kodzie nieprecyzyjne i zbędne) od tego jest SVN Usuwanie kodu przez jego zakomentowanie. Skąd później inne osoby mają wiedzieć dlaczego ten kod pozostał w tej formie? Może jest istotny? Więc nikt go nie usunie. I taki zakomentowany kod później zalega. Jeśli chcemy zachować ten kod na wszelki wypadek od tego jest SVN Stosowanie kodu HTML w komentarzach. Jeśli używamy narzędzi do generowania dokumentacji z komentarzy to one powinny zadbać o jej sformatowanie, a komentarz w kodzie powinien być czytelny dla czytającego kod

49 Reguła złe komentarze (4) Komentarz lokalny opisujący informacje nielokalne. Np. domyślną wartość parametru w funkcji która nie określa tej domyślnej wartości. Komentarz taki najprawdopodobniej stanie się nieaktualny. Jeśli już komentujemy, to tylko to co dzieje się tuż obok Za duży komentarz zamiast cytować cały opis specyfikacji RFC wystarczy napisać jej numer, należy też unikać wszelkich luźnych opisów, opisów historycznych itp. Komentarz nieprecyzyjnie powiązany z elementami kodu, np. nie wskazujący precyzyjnie zmiennych komentarz do kodu wykonującego obliczenia na bazie niejasnych zmiennych Komentarze opisujące w nagłówkach funkcje nie są potrzebne, kiedy mamy krótkie dobrze nazwane funkcje wykonujące pojedyncze operacje Komentarze służące do generowania dokumentacji niepublicznego kodu (wewnątrz systemu) są najczęściej nieprzydatne. Poza tym są podatne na błędy i rozpraszające

50 Formatowanie kodu to nie problem (1) Formatowanie pomaga w uporządkowaniu i czytelności kodu, które pomagają w łatwości utrzymania i rozszerzania kodu, dlatego jest ważne Małe pliki łatwiej zrozumieć niż duże, więc rozsądnym zaleceniem jest utrzymywanie plików o długości przeciętnej 200 wierszy i maksymalnej 500 wierszy Pliki naśladujące artykuły w gazetach Puste wiersze oddzielają osobne koncepcje takie jak deklaracja pakietu/przestrzeni nazw, importy i każda z funkcji Nie stosujemy pustych wierszy tam gdzie nie trzeba, np. nie ma sensu rozdzielać pustym wierszem deklaracji dwóch zmiennych instancyjnych

51 Formatowanie kodu to nie problem (2) Jeśli między koncepcjami jest bliski związek, powinny być również blisko siebie w kodzie Znane i oczekiwane stałe należy trzymać w funkcjach znajdujących się na wysokim poziomie i przekazywać do funkcji znajdujących się na niższym poziomie zamiast trzymać je w funkcjach niższego poziomu W poziomie nie należy przekraczać długości wierszy 120 znaków, żeby nie przewijać kodu poziomo Spacje stosujemy do oddzielenia osobnych elementów, np. jest sensowne oddzielenie spacją operatora przypisania po obu stronach albo argumentów wywołania funkcji, ale nie ma sensu oddzielać spacją nawiasu od nazwy funkcji

52 Formatowanie kodu to nie problem (3) Nie wyrównujemy w kilku kolumnach deklaracji lub przypisań (stosujemy pojedyncze spacje) Wcięcia stosujemy do podkreślenia zakresów, np. instrukcje na poziomie plików nie są nigdy wcinane, ale już kod w obrębie metody jest zawsze wcinany, a implementacje instrukcji if umieszczamy na kolejnym poziomie wcięcia. Bez wcięć kod byłby nieczytelny Nie łamiemy wcięć i nie łączymy wierszy nawet dla bardzo krótkich instrukcji if, pętli while lub jednowierszowych metod Zawsze wcinamy puste zakresy, np. średnik na końcu pustych pętli umieszczamy wcięty w osobnym wierszu

53 Formatowanie kodu to nie problem (4) Zespół programistów używa wspólnych zasad formatowania kodu. Należy ustalić takie zasady jak miejsce umieszczania klamr, wielkość wcięcia, sposób nazywania klas, metod, zmiennych itd. i wprowadzić je do formatera kodu Wg zasad formatowania kodu autora książki pojedyncze wcięcia mają dwie spacje, klamry otwierające nie są w osobnym wierszu, nazwy klas zaczynają się wielką literą, nazwy metod i zmiennych małą literą, zmienne instancyjne są na początku klas

54 Pliki naśladujące artykuły w gazetach Nazwa modułu jak tytuł artykułu. Prosta, sugestywna, informująca nas czy jesteśmy we właściwym module Górne partie kodu źródłowego jak pierwszy akapit artykułu. Algorytmy i koncepcje najwyższego poziomu. Dalsze partie kodu jak kolejne akapity artykułu. Coraz więcej szczegółów w miarę schodzenia w dół, aż do funkcji oraz szczegółów najniższego poziomu na samym dole Użyteczne jest, że artykuły są krótkie, rzadko na całą stronę

55 Jeśli między koncepcjami jest bliski związek, powinny być również blisko siebie w kodzie Zmienne zadeklarowane jak najbliżej miejsca ich użycia Zmienne lokalne deklarujemy na początku krótkich funkcji Zmienne sterujące pętli deklarujemy zazwyczaj wewnątrz instrukcji pętli. Rzadko na początku bloku lub w dłuższych funkcjach przed samą pętlą Zmienne instancyjne deklarujemy zawsze na początku klasy (albo zawsze na końcu, ale konsekwentnie). Nigdy w środku, bo łatwo je pominąć Funkcja wywołująca powinna być powyżej funkcji wywoływanej w bliskiej od niej odległości (najlepiej bezpośrednio przed nią). W ten sposób łatwiej znaleźć wywoływane funkcje i moduł jest czytelniejszy Jeśli funkcje wykonują podobne operacje, powinny ze sobą sąsiadować

56 Obiekty i struktury danych w czystym kodzie Tworzenie abstrakcyjnego sposobu dostępu do danych obiektu nie polega na prostym dodaniu getterów i setterów do zmiennych Kod obiektowy i kod proceduralny (korzystający ze struktur danych) są uzupełniającymi się przeciwieństwami. Stosujmy korzystniejszy dla naszego przypadku Źle, kiedy moduł wie coś o wewnętrznej budowie obiektów z których korzysta Unikajmy hybryd przypominających trochę struktury danych, a trochę obiekty Niektóre formy struktur danych

57 Tworzenie abstrakcyjnego sposobu dostępu do danych obiektu nie polega na prostym dodaniu getterów i setterów do zmiennych Zamiast tego trzeba udostępnić możliwość pracy z istotą tych danych, aby implementacja była dla korzystającego z obiektu nieważna i niewidoczna. Należy określić najlepszy sposób reprezentowania danych zawartych w obiekcie, np. wartość procentowa zamiast absolutnej, przeliczanie punktu na współrzędne prostokątne i kątowe, wymuszenie jednoczesnego określenia obu współrzędnych.

58 Kod obiektowy i kod proceduralny (korzystający ze struktur danych) są uzupełniającymi się przeciwieństwami. Stosujmy korzystniejszy dla naszego przypadku Kod obiektowy ukrywa dane. Oferuje zamiast nich warstwę abstrakcji w postaci zbioru funkcji do operowania na tych danych Kod proceduralny składa się z procedur operujących na strukturach danych, które to nie ukrywają danych i nie mają istotnych funkcji Mocną stroną kodu obiektowego jest dodawanie nowego typu danych tworzymy tylko nową klasę (reszty kodu nie zmieniając) Mocną stroną kodu proceduralnego jest dodawanie nowej operacji tworzymy tylko nową funkcję (reszty kodu nie zmieniając) Słabą stroną kodu obiektowego jest dodawanie nowej operacji musimy dodać ją we wszystkich klasach Słabą stroną kodu proceduralnego jest dodawanie nowego typu danych musimy dodać go we wszystkich funkcjach

59 Źle, kiedy moduł wie coś o wewnętrznej budowie obiektów z których korzysta Prawo Demeter: metoda powinna korzystać jedynie z metod bezpośrednio udostępnianych przez: macierzysty obiekt, zmienne instancyjne macierzystego obiektu, obiekty będące argumentami wywołania, obiekty samodzielnie utworzone. Prawo Demeter zabrania korzystać z metod niewymienionych obiektów ( rozmawiajmy z przyjaciółmi a nie obcymi ), ale nie dotyczy struktur danych (możemy dowolnie dostawać się do ich danych) Przykład: wrak pociągu (wagon.getwagon1().getwagon2().getwagon3()) Jeśli są to struktury danych, wystarczy wydzielić lokalne zmienne Jeśli są to obiekty, należy ukryć strukturę, udostępniając kompletne operacje na odpowiednim poziomie. Obiekt powinien coś robić dla nas zamiast udostępniać nam swoje szczegóły wewnętrzne

60 Unikajmy hybryd przypominających trochę struktury danych, a trochę obiekty (np. zmienne publiczne lub proste gettery i settery do zmiennych wymieszane z metodami realizującymi operacje) Hybrydy mają same słabe strony utrudniają dodawanie nowych typów danych i operacji. Trzeba zdecydować, czy w naszym przypadku bardziej potrzebna jest ochrona funkcji, czy typów.

61 Niektóre formy struktur danych Klasa nie zawierająca nic poza publicznymi zmiennymi. Można to nazwać obiektem transferu danych (DTO), który ma zastosowania takie jak: komunikacja z bazą danych, komunikacja przez sockety itp. Stosuje się je też na początku przekształceń kodu przechodzących od surowych danych z bazy do obiektów Javowy bean zmienne prywatne z publicznymi akcesorami i mutatorami. Fałszywa hermetyzacja Active Record. Zbudowane jak DTO lub beany, ale mają też metody nawigacyjne np. save, find. Udostępniają całą zawartość baz danych Nie należy umieszczać w nich operacji Zamiast tego można umieszczać je jako ukryte dane obiektów udostępniających operacje

62 Zakończenie Pytania Dziękuję za uwagę

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IS/IO - Zajęcia 1 zasady zaliczenia przedmiotu Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica Kraków Prowadzący: mgr inż.

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Informatyka Stosowana Inżynieria Obliczeniowa - Zajęcia 1 zasady zaliczenia przedmiotu Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

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

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost; Klasy w C++ są bardzo ważnym narzędziem w rękach programisty. Klasy są fundamentem programowania obiektowego. Z pomocą klas będziesz mógł tworzyć lepszy kod, a co najważniejsze będzie on bardzo dobrze

Bardziej szczegółowo

C++ Przeładowanie operatorów i wzorce w klasach

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

Bardziej szczegółowo

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main. Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo

Bardziej szczegółowo

Technologie obiektowe

Technologie obiektowe WYKŁAD dr inż. Paweł Jarosz Instytut Informatyki Politechnika Krakowska mail: pjarosz@pk.edu.pl LABORATORIUM dr inż. Paweł Jarosz (3 grupy) mgr inż. Piotr Szuster (3 grupy) warunki zaliczenia Obecność

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

PARADYGMATY PROGRAMOWANIA Wykład 4

PARADYGMATY PROGRAMOWANIA Wykład 4 PARADYGMATY PROGRAMOWANIA Wykład 4 Metody wirtualne i polimorfizm Metoda wirualna - metoda używana w identyczny sposób w całej hierarchii klas. Wybór funkcji, którą należy wykonać po wywołaniu metody wirtualnej

Bardziej szczegółowo

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy

Bardziej szczegółowo

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu.

Obiekt klasy jest definiowany poprzez jej składniki. Składnikami są różne zmienne oraz funkcje. Składniki opisują rzeczywisty stan obiektu. Zrozumienie funkcji danych statycznych jest podstawą programowania obiektowego. W niniejszym artykule opiszę zasadę tworzenia klas statycznych w C#. Oprócz tego dowiesz się czym są statyczne pola i metody

Bardziej szczegółowo

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody Obiektowy PHP Czym jest obiekt? W programowaniu obiektem można nazwać każdy abstrakcyjny byt, który programista utworzy w pamięci komputera. Jeszcze bardziej upraszczając to zagadnienie, można powiedzieć,

Bardziej szczegółowo

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

Czym są właściwości. Poprawne projektowanie klas Z akcesorów get i set korzysta każdy kto programuje w C#. Stanowią one duże udogodnienie w programowaniu obiektowym. Zapewniają wygodę, bezpieczeństwo i znacząco skracają kod. Akcesory są ściśle związane

Bardziej szczegółowo

Materiały do zajęć VII

Materiały do zajęć VII Spis treści I. Klasy Materiały do zajęć VII II. III. Konstruktor Właściwości i indeksatory Klasy Programowanie obiektowe wiadomości wstępne Paradygmat programowania obiektowego Abstrakcja Hermetyzacja

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

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

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Wprowadzenie do programowania obiektowego. Pojęcie struktury i klasy. Spotkanie 03 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Idea programowania obiektowego Definicja

Bardziej szczegółowo

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Zadanie: Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób. Na kolejnych zajęciach projekt będzie rozwijana i uzupełniana o kolejne elementy omawiane

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,

Bardziej szczegółowo

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/

Język programowania. Andrzej Bobyk http://www.alfabeta.lublin.pl. www.alfabeta.lublin.pl/jp/ Język programowania Andrzej Bobyk http://www.alfabeta.lublin.pl www.alfabeta.lublin.pl/jp/ Literatura K. Reisdorph: Delphi 6 dla każdego. Helion, Gliwice 2001 A. Grażyński, Z. Zarzycki: Delphi 7 dla każdego.

Bardziej szczegółowo

Wykład 5: Klasy cz. 3

Wykład 5: Klasy cz. 3 Programowanie obiektowe Wykład 5: cz. 3 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD - podstawy Konstruktor i destruktor (część I) 2 Konstruktor i destruktor KONSTRUKTOR Dla przykładu

Bardziej szczegółowo

DECLARE VARIABLE zmienna1 typ danych; BEGIN

DECLARE VARIABLE zmienna1 typ danych; BEGIN Procedury zapamiętane w Interbase - samodzielne programy napisane w specjalnym języku (właściwym dla serwera baz danych Interbase), który umożliwia tworzenie zapytań, pętli, instrukcji warunkowych itp.;

Bardziej szczegółowo

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? 1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie? a) konstruktor b) referencje c) destruktor d) typy 2. Które z poniższych wyrażeń są poprawne dla klasy o nazwie

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014

Modelowanie diagramów klas w języku UML. Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Modelowanie diagramów klas w języku UML Łukasz Gorzel 244631@stud.umk.pl 7 marca 2014 Czym jest UML - Unified Modeling Language - Rodzina języków modelowania graficznego - Powstanie na przełomie lat 80

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ), Program 351203 Opracowanie: Grzegorz Majda Tematyka zajęć 2. Przygotowanie środowiska pracy

Bardziej szczegółowo

Dokumentacja do API Javy.

Dokumentacja do API Javy. Dokumentacja do API Javy http://java.sun.com/j2se/1.5.0/docs/api/ Klasy i obiekty Klasa jest to struktura zawierająca dane (pola), oraz funkcje operujące na tych danych (metody). Klasa jest rodzajem szablonu

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego Iwona Kochaoska Programowanie Obiektowe Programowanie obiektowe (ang. object-oriented programming) - metodyka tworzenia programów komputerowych,

Bardziej szczegółowo

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Klasy i obiekty cz II

Klasy i obiekty cz II Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Klasy i obiekty cz II Hermetyzacja, mutatory, akcesory, ArrayList Rozwijamy aplikację Chcemy, aby obiekty klasy

Bardziej szczegółowo

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE.

C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie. C++ - dziedziczenie C++ - DZIEDZICZENIE. C++ - DZIEDZICZENIE Do najważniejszych cech języka C++ należy możliwość wielokrotnego wykorzystywania kodu Prymitywnym, ale skutecznym sposobem jest kompozycja: deklarowanie obiektów wewnątrz innych klas,

Bardziej szczegółowo

Programowanie obiektowe - 1.

Programowanie obiektowe - 1. Programowanie obiektowe - 1 Mariusz.Masewicz@cs.put.poznan.pl Programowanie obiektowe Programowanie obiektowe (ang. object-oriented programming) to metodologia tworzenia programów komputerowych, która

Bardziej szczegółowo

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np Klasy Klasa jest nowym typem danych zdefiniowanym przez użytkownika Wartości takiego typu nazywamy obiektami Najprostsza klasa jest po prostu strukturą, np struct Zespolona { Klasy jako struktury z operacjami

Bardziej szczegółowo

TEMAT : KLASY DZIEDZICZENIE

TEMAT : KLASY DZIEDZICZENIE TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Technologie i usługi internetowe cz. 2

Technologie i usługi internetowe cz. 2 Technologie i usługi internetowe cz. 2 Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 15 luty 2014 r. 1 Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to paradygmat programowania,

Bardziej szczegółowo

Modelowanie obiektowe

Modelowanie obiektowe Modelowanie obiektowe ZPO 2018/2019 Dr inż. W. Cichalewski Materiały wykonane przez W. Tylman Diagramy klas Diagramy klas Zawiera informacje o statycznych związkach między elementami (klasami) Są ściśle

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Inicjalizacja agregatowa zmiennej tablicowej int a[5] = 1,2,3,4,5 INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU Struktury są również agregatami, dlatego: struct X double f; char c; X x1 = 1, 2.2, 'c' Ale

Bardziej szczegółowo

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz

Bardziej szczegółowo

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

Bardziej szczegółowo

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

Wykład VII. Programowanie III - semestr III Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład VII - semestr III Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Wytwarzanie oprogramowania Model tworzenia oprogramowania

Bardziej szczegółowo

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego.

Diagram klas UML jest statycznym diagramem, przedstawiającym strukturę aplikacji bądź systemu w paradygmacie programowania obiektowego. Umiejętność czytania oraz tworzenia diagramów klas UML jest podstawą w przypadku zawodu programisty. Z takimi diagramami będziesz spotykał się w przeciągu całej swojej kariery. Diagramy klas UML są zawsze

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop. 2016 Spis treści Przedmowa 1 Stosowana notacja 1 1. Wprowadzenie 3 1.1. Konsola interaktywna języka Scala 3 1.2. Zmienne 5 1.3. Wartości

Bardziej szczegółowo

PHP: bloki kodu, tablice, obiekty i formularze

PHP: bloki kodu, tablice, obiekty i formularze 1 PHP: bloki kodu, tablice, obiekty i formularze SYSTEMY SIECIOWE Michał Simiński 2 Bloki kodu Blok if-else Switch Pętle Funkcje Blok if-else 3 W PHP blok if i blok if-else wyglądają tak samo i funkcjonują

Bardziej szczegółowo

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Programowanie w Sieci Internet Blok 2 - PHP Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Co dziś będziemy robić Podstawy podstaw, czyli małe wprowadzenie do PHP, Podstawy

Bardziej szczegółowo

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Polimorfizm, metody wirtualne i klasy abstrakcyjne Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,

Bardziej szczegółowo

4. Funkcje. Przykłady

4. Funkcje. Przykłady 4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie

Bardziej szczegółowo

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016 Wstęp - wykład 0 22 lutego 2016 Historia Simula 67 język zaprojektowany do zastosowan symulacyjnych; Smalltalk 80 pierwszy język w pełni obiektowy; Dodawanie obiektowości do języków imperatywnych: Pascal

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

Inżynieria Oprogramowania

Inżynieria Oprogramowania Inżynieria Oprogramowania Standardy kodowania i dokumentowanie kodu (Na przykładzie języka Java i dokumentacji Javadoc) Cel zajęć Celem zajęć jest zapoznanie studentów z podstawowymi zasadami formatowania

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 10 I 2012 1 Zabronienie kopiowania Czasami nie ma sensu, żeby obiekty pewnego typu były kopiowane z innych obiektów.

Bardziej szczegółowo

Programowanie i techniki algorytmiczne

Programowanie i techniki algorytmiczne Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

Aplikacje w środowisku Java

Aplikacje w środowisku Java Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - wprowadzenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 Klasa zbiór pól i metod Obiekt

Bardziej szczegółowo

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

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę. Języki C i C++ to bardzo uniwersalne platformy programistyczne o ogromnych możliwościach. Wykorzystywane są do tworzenia systemów operacyjnych i oprogramowania użytkowego. Dzięki niskiemu poziomowi abstrakcji

Bardziej szczegółowo

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Część XXII C++ w Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie. Ćwiczenie 1 1. Utwórz nowy projekt w Dev C++ i zapisz go na

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe IV. Interfejsy i klasy wewnętrzne Małgorzata Prolejko OBI JA16Z03 Plan Właściwości interfejsów. Interfejsy a klasy abstrakcyjne. Klonowanie obiektów. Klasy wewnętrzne. Dostęp do

Bardziej szczegółowo

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegółowo

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

Bardziej szczegółowo

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Wirtualne destruktory class A int* a; A(int _a) a = new int(_a);} virtual ~A() delete a;} class B: public A double* b;

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 2 - wprowadzenie do zmiennych mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 23 października 2017 1 / 26 mgr inż. Krzysztof Szwarc Podstawy i

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright 2018 Spis treści Część I. Wprowadzenie do programowania 13 Rozdział 1. Wprowadzenie 15 Struktura

Bardziej szczegółowo

Liczby losowe i pętla while w języku Python

Liczby losowe i pętla while w języku Python Liczby losowe i pętla while w języku Python Mateusz Miotk 17 stycznia 2017 Instytut Informatyki UG 1 Generowanie liczb losowych Na ogół programy są spójne i prowadzą do przewidywanych wyników. Czasem jednak

Bardziej szczegółowo

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania Celem ćwiczenia jest zapoznanie studentów z najprostszą dynamiczną strukturą

Bardziej szczegółowo

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Dziedziczenie Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasy Student oraz Pracownik: class Student class Pracownik

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15.

Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop Spis treści. Wstęp 15. Kod doskonały : jak tworzyć oprogramowanie pozbawione błędów / Steve McConnell. Gliwice, cop. 2017 Spis treści Wstęp 15 Podziękowania 23 Listy kontrolne 25 Tabele 27 Rysunki 29 Część I Proces budowy oprogramowania

Bardziej szczegółowo

PHP 5 język obiektowy

PHP 5 język obiektowy PHP 5 język obiektowy Wprowadzenie Klasa w PHP jest traktowana jak zbiór, rodzaj różnych typów danych. Stanowi przepis jak stworzyć konkretne obiekty (instancje klasy), jest definicją obiektów. Klasa reprezentuje

Bardziej szczegółowo

Pętle. Dodał Administrator niedziela, 14 marzec :27

Pętle. Dodał Administrator niedziela, 14 marzec :27 Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać

Bardziej szczegółowo

Programowanie w Ruby

Programowanie w Ruby Programowanie w Ruby Wykład 3 Marcin Młotkowski 22 października 2018 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 70 / 432 Z poprzedniego wykładu String to ciąg bajtów zwykle reprezentujących

Bardziej szczegółowo

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main

Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem

Bardziej szczegółowo

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1

Zofia Kruczkiewicz - Modelowanie i analiza systemów informatycznych 1 Charakterystyka oprogramowania obiektowego 1. Definicja systemu informatycznego 2. Model procesu wytwarzania oprogramowania - model cyklu życia oprogramowania 3. Wymagania 4. Problemy z podejściem nieobiektowym

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

1. Wypisywanie danych

1. Wypisywanie danych 1. Wypisywanie danych Przykłady 1.1. Napisz program, który wypisze na ekran słowa Hello, world!. 1 // Przyklad 1: Hello, world! 3 using namespace std; 5 int main() { 6 cout

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

Do czego służą klasy?

Do czego służą klasy? KLASY Dorota Pylak 2 Do czego służą klasy? W programowaniu obiektowym posługujemy się obiektami. Obiekty charakteryzują się: cechami (inaczej - atrybutami lub stanami) operacjami, które na nich można wykonywać

Bardziej szczegółowo

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

Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop Spis treści Programowanie dla początkujących w 24 godziny / Greg Perry, Dean Miller. Gliwice, cop. 2017 Spis treści O autorach 11 Podziękowania 12 Wprowadzenie 13 CZĘŚĆ I ZACZNIJ PROGRAMOWAĆ JUŻ DZIŚ Godzina 1. Praktyczne

Bardziej szczegółowo

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania, SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania Wykład 3 1 SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania Przykład Bingo 2 Treść przykładu Jak wygląda karta do

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

JAVA W SUPER EXPRESOWEJ PIGUŁCE

JAVA W SUPER EXPRESOWEJ PIGUŁCE JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

Enkapsulacja, dziedziczenie, polimorfizm

Enkapsulacja, dziedziczenie, polimorfizm 17 grudnia 2008 Spis treści I Enkapsulacja 1 Enkapsulacja 2 Spis treści II Enkapsulacja 3 Czym jest interfejs Jak definuje się interfejs? Rozszerzanie interfejsu Implementacja interfejsu Częściowa implementacja

Bardziej szczegółowo