Zarządzanie kodem projektu. Tworzenie i utrzymywanie czystego kodu Paweł Stroiński,
|
|
- Halina Makowska
- 8 lat temu
- Przeglądów:
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 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ż.
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
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
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
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
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
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
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ść
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
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
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
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
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
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ć,
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
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
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,
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
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.
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
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
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
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;
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,
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.
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
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.;
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
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
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
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
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
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
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
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.
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)
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,
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
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
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,
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
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
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ą
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
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,
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
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
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
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
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
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
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,
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
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ą
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
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,
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
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
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
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
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
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
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
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
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.
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
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
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
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
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
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
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
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:
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
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
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
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;
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
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
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
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
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ą
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
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
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
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
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ć
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
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
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
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
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
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
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ć
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
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
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
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
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
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