Etap implementacji. Refaktoryzacja
|
|
- Marta Angelika Sobczyk
- 9 lat temu
- Przeglądów:
Transkrypt
1 Etap implementacji Refaktoryzacja
2 Koncepcja refaktoryzacji Termin refaktoryzacja (ang. Refactoring) definiuje się jako mechanizm zmiany struktury kodu bez zmiany jego zachowania (funkcjonalności). Celem refaktoryzacji jest więc nie wytwarzanie nowej funkcjonalności, ale utrzymywanie odpowiedniej, wysokiej jakości organizacji systemu.
3 Przebieg procesu projektowego Funkcjonalność kodu Granica spełnienia zadanej funkcjonalności Automatyzacja niektórych czynności skraca czas modyfikacji kodu Okresy przeznaczane na refartoryzację Czas pracy nad kodem
4 Korzyści z refaktoryzacji Ułatwienie pielęgnacji (modyfikacji) kodu. Zwiększenie integralności danych i zgodności ich reprezentacji z semantyką języka. Ułatwienie wykorzystania mechanizmów automatycznego generowania kodu. Ograniczenie redundancji (nadmiarowości) i narzucanie standardów budowy. Zachowanie silnej separacji warstw systemu (w przypadku systemów o architekturze wielowarstwowej).
5 Dwukierunkowe działania w ramach refaktoryzacji Modyfikowanie elementów systemu w celu wpasowania ich w przyjęte standardy i wzorce. Poszukiwanie nowych standardów i wzorców, które pojawiają się w systemie w trakcie jego rozwoju i ich precyzyjne definiowanie.
6 Refaktoryzacja a zarządzanie projektem informatycznym. Przy dużych projektach koszt refaktoryzacji jest rekompensowany obniżką kosztów wprowadzenia późniejszych globalnych zmian w projekcie. W przypadku projektów obarczonych dużym ryzkiem niepowodzenia (np. z powodu niestabilnych wymagań funkcjonalnych klienta) regularnie prowadzona refaktoryzacja wydaje się nieodzowną.
7 Istota refaktoryzacji Przeprowadzać zmiany w sposób bezpieczny, to znaczy utrzymujący dotychczasową funkcjonalność zmienianego fragmentu programu. Dwie podstawowe metody weryfikacji poprawności przekształceń: analiza własności zmienianego kodu, testowanie jednostkowe wprowadzonych zmian.
8 Analiza własności zmienianego kodu Sprowadza się do wyznaczenia dla każdego przekształcenia refaktoryzacyjnego warunków wstępnych oraz końcowych, które muszą być spełnione, aby zmiana była poprawna. Warunki te to najczęściej statyczne własności klasy lub metody (np. jej relacje dziedziczenia, powiązania z innymi elementami systemu), dlatego ich weryfikacji w większości przypadków może dokonać kompilator lub analizator składniowy.
9 Testowanie jednostkowe Jest implementowane przy użyciu bibliotek z serii xunit, (np. JUnit). W istocie jest to regresyjna weryfikacja poprawności działania poszczególnych metod, czyli stwierdzenie, czy wprowadzane zmiany nie zmieniają zachowania klas. Testy stanowią niezmienniki przekształceń, bo muszą być spełnione zarówno przed, jak i po przeprowadzeniu zmian.
10 xunit rodziną narzędzi do testów modułowych Platforma xunit URL Java JUnit VBasic VBUnit C++ CPPUnit C# NUnit Delphi DUnit PHP PHPUnit
11 Wolne narzędzia do refaktoryzacji Platform Tools URL General X-develop Delphi Model Maker Visual Basic C/C++ Java Refactor! for Visual Basic SlickEdit, Ref+ +, Xrefactory IntelliJ Idea, Eclipse, JFactor wnloads/2005/tools/refactor/
12 Refaktoryzacja a przykładowe IDE Typy refaktoryzacji dostępne w Eclipse: Na poziomie struktury fizycznej projektu (Physical Structure). Na poziomie struktury klas (Class Level Structure). Na poziomie wewnętrznej budowy klasy (Structure inside a Class).
13 Metody Physical Structure Rename Move Change Method Signature Convert Anonymous Class to Nested Convert Nested Type to Top Level (Eclipse 2) Move Member Type to New File (Eclipse 3)
14 Metody Class Level Structure Push Down Pull Up Extract Interface Generalize Type (Eclipse 3) User Supertype Where Possible
15 Metody Structure inside a Class Inline Extract Method Extract Local Variable Extract Constant Introduce Parameter (Eclipse 3 only) Introduce Factory (Eclipse 3 only) Encapsulate Field
16 Ocena jakości kodu Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Przykry zapach jest symptomem niskiej jakości kodu, która wskazuje na konieczność refaktoryzacji. Martin Fowler Refactoring, Improving the design of existing code, Addison-Wesley, 1999
17 Zduplikowany kod (Duplicated Code) Objawy: ten sam lub podobny kod pojawia się w różnych miejscach systemu. Rozwiązania: Jedna klasa: wyłączenie wspólnych części do jednej metody (Extract Method). Bliźniacze klasy: wyłączenie metody ze wspólną funkcjonalnością i następnie podniesienie (Pull-up the Method) do wspólnej nadklasy. Niespokrewnione klasy: wyłączenie klasy (Extract Class) ze wspólnymi elementami i delegowanie do niej.
18 Duża metoda (Long Method) Objawy: Metoda wykonuje wiele różnych czynności. Brak wsparcia ze strony innych metod, przez co niektóre metody operują na niższym poziomie niż powinny. Nadmiernie skomplikowana obsługa wyjątków. Rozwiązania: Extract Method. Wyłączenie tymczasowych zmiennych do zewnętrznych metod (Replace Temp with Query). Zmniejszenie liczby parametrów (Introduce Parameter Object or Preserve Whole Object). Stworzenie nowej klasy z metody i podział funkcionalności (Replace Method with Method Object).
19 Duża klasa (Large class) Objawy: Klasa posiada zbyt duży zakres odpowiedzialności. Występują liczne klasy wewnętrzne i instancje klasy. Nadmierna liczba metod ułatwiających. Rozwiązania Ekstrakcja klasy w celu podziału klasy przez referencje. Ekstrakcja podklasy (Subclass) w celu podziału klasy przez dziedziczenie. Ekstrakcja interfejsu w celu podziału klasy przez polimorfizm. Przesunięcie części zadań do nadklasy (Superclass).
20 Leniwa klasa (Lazy Class) Objawy: klasa ma znikomą odpowiedzialność lub nie ma odpowiedzialności wcale. Rozwiązania: Wchłonięcie przez nadklasę/podklasę (Collapse Hierarchy). Wchłonięcie klasy przez referencje (Inline Class).
21 Klasa danych (Data Class) Objawy: klasa jest odpowiedzialna jedynie za przechowywanie danych i nie posiada istotnych metod (Transfer Object). Rozwiązania: Wzbogacenie funkcjonalności (Extract Method i Move Method). Usunięcie klasy (Inline Class).
22 Instrukcje przełączające (Switch Statements) Objawy: metoda posiada rozbudowany przepływ sterowania, oparty na złożonych wyrażeniach warunkowych. Rozwiązania: Wyłączenie wspólnych części do osobnych metod w tej samej klasie (Extract Method). Użycie polimorfizmu (Replace Conditional with Polymorphism/State). Użycie dziedziczenia (Replace Conditional with Subclasses).
23 Odrzucony spadek (Refused Bequest) Objawy: podklasy nie potrzebują odziedziczonych metod i pól. Rozwiązania: Utworzenie nowej klasy bliźniaczej (Push Down Method and Push Down Field). Zastąpienie dziedziczenia delegacją (Replace Inheritance with Delegation).
24 Niewłaściwa hermetyzacja (Inappropriate Intimacy) Objawy: bezpośredni dostęp do wewnętrznych pól innej klasy. Rozwiązania: Przesunięcie pól/metod do właściwej klasy (Move Method/ Move Field). Ograniczenie dwukierunkowych relacji (Change Bidirectional Association to Unidirectional Association). Wyłączenie elementów o wspólnym dostępie do osobnej klasy (Extract Class). Zastąpienie dziedziczenia delegacją.
25 Zazdrość o funkcję (Feature Envy) Objawy: Metoda jednej klasy intensywnie korzysta z funkcji innej klasy. Niska spójność klasy. Rozwiązania Przesunięcie metody do właściwej klasy (Move Method). Użycie wzorca Visitor.
26 Łańcuchy wywołań metod (Message Chains) Objawy: długie łańcuchy wywołań getanotherobject(). Rozwiązania: Ukrycie klas delegujących (Hide Delegate). Przesunięcie niektórych metod w dół łańcucha (Extract Method and Move Method).
27 Chirurgia śrutówką (Shotgun Surgery) Objawy: wprowadzona zmiana wymaga modyfikacji wielu innych klas. Rozwiązania: przesunięcie wszystkich obszarów zmienności do jednej klasy (Move Method and Move Field).
28 Przekształcenia refaktoryzacyjne Przykłady
29 Przykład: Rename Method class ClassA void Name_1 () { // some code class ClassA void Name_2 () { // some code Warunki wstępne: w klasie ClassA nie istnieje metoda void Name_2() klasa ClassA nie dziedziczy metod Name_1() ani Name_2() Warunki końcowe: klasa ClassA nie posiada metody Name_1() klasa ClassA posiada metodę Name_2()
30 Przykład: Extract Method void scalarproduct(string[] params) { int[] x = preparex(params); int[] y = preparey(params); int[] product = computexy(x, y); //... for (i = 0; i < x.length; i++) { out.println("x = " + x[i]); out.println("y = " + y[i]); out.println("x * Y = " + product[i]); void scalarproduct(string[] params) { int[] x = preparex(params); int[] y = preparey(params); int[] product = computexy(x, y); //... printscalarproduct(x, y, product); void printscalarproduct(int[] x, int[]y, int[] product) { for (i = 0; i < x.length; i++) { out.println("x = " + x[i]); out.println("y = " + y[i]); out.println("x * Y = " + product[i]); Warunki wstępne: wskazany blok modyfikuje co najwyżej jedną zmienną w klasie nie istnieje dotychczas metoda printscalarproduct() klasa nie dziedziczy metod scalarproduct() ani printscalarproduct()
31 Encapsulate Collection M. Fowler, 1999 Problem Metoda get() w klasie właściciela zwraca kolekcję dostępną do modyfikacji Cel Przeniesienie odpowiedzialności za kolekcję do jej właściciela Mechanika dodaj w klasie właściciela metody add() i remove() dla kolekcji, zmień bezpośrednie odwołania do metod add() i remove() kolekcji odwołaniami do metod jej właściciela, zmień metodę get() zwracającą kolekcję, tak aby zwracała jej widok tylko do odczytu, skompiluj i przetestuj, opcjonalnie: zmień metodę get() tak, aby zwracała Iterator.
32 Przykład public class Student { Collection wyklady; public Collection wyklady() { return wyklady; public class Student { Collection wyklady; public boolean dodajwyklad(wyklad w) { return wyklady.add(w); public boolean usunwyklad(wyklad w) { return wyklady.remove(w); public Collection wyklady() { return Collections.unmodifiableCollection(wyklady);
33 Wprowadź Null Object Problem Referencje do klasy wymagają ciągłego porównywania z wartością null Cel Wprowadzenie obiektu reprezentującego wartość null M. Fowler, 1999 Mechanika utwórz podklasę reprezentującą wartość null o nazwie NullKlasa, utwórz w klasie i podklasie metodę isnull(); w klasie metoda zwraca false, w podklasie true, skompiluj klasy, zastąp u klientów referencje null klasy instancjami podklasy, zastąp warunki sprawdzające referencję null wywołaniem isnull(), pokryj metody w podklasie zgodnie z semantyką obiektu reprezentującego null, usuń metody isnull().
34 Przykład public class Student { Collection wyklady; public Collection wyklady() { return wyklady; public class Student { Collection wyklady; public boolean dodajwyklad(wyklad w) { return wyklady.add(w); public boolean usunwyklad(wyklad w) { return wyklady.remove(w); public Collection wyklady() { return Collections.unmodifiableCollection(wyklady);
35 Przykład public class Student { Collection wyklady; public Collection wyklady() { return wyklady; public class Student { Collection wyklady; public boolean dodajwyklad(wyklad w) { return wyklady.add(w); public boolean usunwyklad(wyklad w) { return wyklady.remove(w); public Collection wyklady() { return Collections.unmodifiableCollection(wyklady);
Pielęgnacja kodu: refaktoryzacja. Jacek Starzyński, ZETiIS PW
Pielęgnacja kodu: refaktoryzacja Jacek Starzyński, ZETiIS PW Plan wykładu Wprowadzenie Poprawność i jej weryfikacja Przykre zapachy w kodzie programu Refaktoryzacje Wprowadzenie: po co? Wysoki koszt pielęgnacji
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2015 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017
Projektowanie obiektowe oprogramowania Wykład 4 wzorce projektowe cz.i. wzorce podstawowe i kreacyjne Wiktor Zychla 2017 1 Wzorce podstawowe 1.1 Interface vs Abstract class class InterfaceAbstractClass
Katalog przekształceń refaktoryzacyjnych cz. I
cz. I Prowadzący: Bartosz Walter cz. I 1 Agenda Szablon przekształcenia refaktoryzacyjnego Przekazywanie parametrów do metod Przekształcenia zmiennych lokalnych Przekształcenia w obrębie metod i pól cz.
Wzorce projektowe i refaktoryzacja
Wzorce projektowe i refaktoryzacja Paweł Kozioł p.koziol@students.mimuw.edu.pl 18.01.2005 Moja praca magisterska Narzędzie dla środowiska Eclipse wspierające stosowanie wzorców projektowych J2EE Prowadzący:
Wprowadzenie do programowania aplikacji mobilnych
Wprowadzenie do programowania aplikacji mobilnych dr Przemysław Juszczuk dr Przemysław Juszczuk Trochę historii Idea wzorców projektowych wywodzi się jeszcze z wczesnych lat osiemdziesiątych ubiegłego
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
O czym dzisiaj? krótko o refaktoryzacji; dźwięki w Android; aparat w telefonie; Baza danych; GPS.
O czym dzisiaj? krótko o refaktoryzacji; dźwięki w Android; aparat w telefonie; Baza danych; GPS. Refaktoryzacja Definicja Refaktoryzacja, zwana także refaktoringiem (ang. Refactoring) jest to proces wprowadzania
Wprowadzenie do refaktoryzacji
Wprowadzenie do refaktoryzacji Prowadzący: Bartosz Walter Wprowadzenie do refaktoryzacji 1 Motto Nawet idiota potrafi napisać kod zrozumiały dla komputera. Prawdziwi programiści tworzą kod zrozumiały dla
What Is Refactoring?
What Is Refactoring? Definition: The process of changing software in a way that the external behavior is not altered but the internal structure is improved. Or, an instance of such a change. (E.g. I carried
Środowisko NetBeans. Paweł Boguszewski
Środowisko NetBeans Paweł Boguszewski Plan prezentacji Wprowadzenie Historia Funkcjonalność Kierunek Rozwoju Wtyczki Platforma NetBeans Podsumowanie Wprowadzenie NetBeans.org projekt OpenSource zapoczątkowany
Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r.
Programowanie w Javie 1 Wykład i Ćwiczenia 3 Programowanie obiektowe w Javie cd. Płock, 16 października 2013 r. Programowanie obiektowe Programowanie obiektowe (z ang. object-oriented programming), to
Programowanie obiektowe
Wykład 12 Marcin Młotkowski 16 maja 2018 Plan wykładu 1 Analiza obiektowa Dziedziczenie Dziedziczenie a składanie 2 Marcin Młotkowski 482 / 537 Dziedziczenie Dziedziczenie a składanie Plan wykładu 1 Analiza
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
Diagramy klas. dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com
Diagramy klas dr Jarosław Skaruz http://ii3.uph.edu.pl/~jareks jaroslaw@skaruz.com O czym będzie? Notacja Ujęcie w różnych perspektywach Prezentacja atrybutów Operacje i metody Zależności Klasy aktywne,
Polimorfizm. dr Jarosław Skaruz
Polimorfizm dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? finalne składowe klasy abstrakcyjne interfejsy polimorfizm Finalne składowe Domyślnie wszystkie pola i metody
Platformy Programistyczne Podstawy języka Java
Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo
Programowanie obiektowe
Programowanie obiektowe Laboratorium 11 - przegląd wybranych wzorców mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 24 maja 2017 1 / 38 mgr inż. Krzysztof Szwarc Programowanie obiektowe Wzorce
Podstawy programowania III WYKŁAD 6
Podstawy programowania III WYKŁAD 6 Jan Kazimirski 1 Projekt: Katalog książek elektronicznych c.d. 2 Diagram przypadków użycia 3 Iteracja 1 Zaprojektowanie panelu głównego aplikacji Realizacja przypadków
TESTOWANIE OPROGRAMOWANIA
TESTOWANIE OPROGRAMOWANIA Uważaj na ten program ja tylko udowodniłem jego poprawność, nie testowałem go Donald Knuth Plan prezentacji 1. Testowanie wstęp 2. Refaktoryzacja 3. Pojęcia związane z testowaniem
Cuchnące testy Systematyka, objawy, leczenie. Bartosz Walter
Cuchnące testy Systematyka, objawy, leczenie Bartosz Walter Hmmm. Coś mi tu śmierdzi nie wiem dokładnie co i skąd, ale coś mi nie pasuje Skąd te zapachy? Jeżeli coś niemiło pachnie, to warto zmienić pieluchę
Wzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Iterator czynnościowy wzorzec projektowy (obiektowy), którego celem jest zapewnienie sekwencyjnego dostępu do podobiektów zgrupowanych w większym obiekcie (np.
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Problemy projektowania obiektowego. Czy podobne problemy można rozwiązywac w podobny sposób?
Problemy projektowania obiektowego Czy podobne problemy można rozwiązywac w podobny sposób? Czy te problemy można przedstawić w abstrakcyjny sposób, tak aby były pomocne w tworzeniu rozwiązań w różnych
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,
Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski
Adapter: opis Wzorce Strukturalne Tomasz Borzyszkowski Alternatywna nazwa: Wrapper (opakowanie) Rola obiektu Adapter: pełni wobec Klienta rolę otoczki, która umożliwia przetłumaczenie jego żądań na protokół
Modelowanie i Programowanie Obiektowe
Modelowanie i Programowanie Obiektowe Wykład I: Wstęp 20 październik 2012 Programowanie obiektowe Metodyka wytwarzania oprogramowania Metodyka Metodyka ustandaryzowane dla wybranego obszaru podejście do
Singleton. Cel: Przykład: Zastosowanie: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej.
1/8 Singleton Cel: Zapewnienie, że klasa ma tylko jedną instancję i dostarczenie globalnego dostępu do niej. Przykład: Niekiedy ważne jest, aby tworzyć tylko jedną instancję jakiejś klasy. Globalne zmienne
Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania
Instrukcja 2 Laboratorium z Podstaw Inżynierii Oprogramowania Opis biznesowy świata rzeczywistego Wymagania funkcjonalne i niefunkcjonalne aplikacji Diagram przypadków życia Diagramy klas i sekwencji:
Aplikacje w środowisku Java
Aplikacje w środowisku Java Materiały do zajęć laboratoryjnych Klasy i obiekty - dziedziczenie mgr inż. Kamil Zieliński Katolicki Uniwersytet Lubelski Jana Pawła II 2018/2019 W ramach poprzedniego laboratorium
REFERAT PRACY DYPLOMOWEJ
REFERAT PRACY DYPLOMOWEJ Temat pracy: Projekt i implementacja środowiska do automatyzacji przeprowadzania testów aplikacji internetowych w oparciu o metodykę Behavior Driven Development. Autor: Stepowany
Interfejsy i klasy wewnętrzne
Interfejsy i klasy wewnętrzne mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Interfejs klasy sposób komunikacji z jej obiektami (zestaw składowych publicznych). Określa on zestaw
Praca z kodem legacy : strategie, naprawa błędów, refaktoryzacja oraz
Program szkolenia: Praca z kodem legacy : strategie, naprawa błędów, refaktoryzacja oraz Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Praca z kodem legacy : strategie, naprawa
Refaktoryzacja. Na podstawie
Refaktoryzacja Na podstawie www.refactoring.com 1 Plan Refaktoryzacja Co to jest Ogólne zasady i wskazówki Katalog refaktoryzacji Narzędzia (Eclipse, IntelliJ) 2 Co to jest refaktoryzacja Proces zmian
Współbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
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
Programowanie Komputerów
Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera
Programowanie obiektowe. Wprowadzenie
1 Programowanie obiektowe Wprowadzenie 2 Programowanie obiektowe Object-oriented programming Najpopularniejszy obecnie styl (paradygmat) programowania Rozwinięcie koncepcji programowania strukturalnego
Dziedziczenie. dr Jarosław Skaruz
Dziedziczenie dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com Dziedziczenie specjalizacja Dziedziczenie generalizacja Generalizacja-specjalizacja jest takim związkiem pomiędzy klasami,
Refaktoryzacja do wzorców projektowych
IDZ DO PRZYK ADOWY ROZDZIA KATALOG KSI EK ZAMÓW DRUKOWANY KATALOG Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl TWÓJ KOSZYK CENNIK I INFORMACJE ZAMÓW INFORMACJE
Weryfikacja i walidacja. Metody testowania systemów informatycznych
Weryfikacja i walidacja Metody testowania systemów informatycznych Zagadnienia Weryfikacja a walidacja Etapy procesu testowania Rola planowania w procesie testowania systemów Przegląd różnych strategii
Programowanie w języku Java WYKŁAD
Programowanie w języku Java WYKŁAD dr inż. Piotr Zabawa Certyfikowany Konsultant IBM/Rational e-mail: pzabawa@pk.edu.pl www: http://www.pk.edu.pl/~pzabawa 26.05.2014 WYKŁAD 13 Refleksja Data Access Object
12) Wadą modelu kaskadowego jest: Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 13) Wadą modelu opartego na prototypowaniu jest:
Zagadnienia obowiązujące na egzaminie z inżynierii oprogramowania: 1) Oprogramowanie to: 2) Produkty oprogramowania w inżynierii oprogramowania można podzielić na: 3) W procesie wytwarzania oprogramowania
Analiza i projektowanie obiektowe 2016/2017. Wykład 11: Zaawansowane wzorce projektowe (1)
Analiza i projektowanie obiektowe 2016/2017 Wykład 11: Zaawansowane wzorce projektowe (1) Jacek Marciniak Wydział Matematyki i Informatyki Uniwersytet im. Adama Mickiewicza 1 Plan wykładu 1. Wzorce projektowe
METODY PROGRAMOWANIA
METODY PROGRAMOWANIA Testy jednostkowe 8 grudnia 2017 Krzysztof Pawłowski kpawlowski@pjwstk.edu.pl PO CO NAM TESTY? weryfikacja poprawności sprawdzanie regresji specyfikacja dokumentacja wymuszanie dobrego
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,
Całościowe podejście do testowania automatycznego dla programistów. /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia)
Program szkolenia: Całościowe podejście do testowania automatycznego dla programistów Java /C#/PHP (TDD, BDD, Spec. by Example, wzorce, narzędzia) Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści
C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop. 2016 Spis treści Spis rysunków 11 Spis tabel 13 Przedmowa 15 Wprowadzenie 17 Podziękowania 27 O autorach 29 1 Wprowadzenie
Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki Problem: Jak zaimplementować stos? Co się stanie gdy dodamy do stosu obiekt typu Czlowiek? Co się stanie, gdy spróbujemy ten obiekt odczytać
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
Wzorce projektowe cz. II. Wzorce projektowe cz. II 1/35
Wzorce projektowe cz. II Wzorce projektowe cz. II 1/35 Wzorce projektowe cz. II 2/35 Iterator Przeznaczenie Wzorzec zapewnia sekwencyjny dostęp do elementów obiektu zagregowanego bez ujawniania jego reprezentacji
Prototype (prototyp) Cel: Przykład: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp.
1/14 Prototype (prototyp) Cel: Określenie rodzaju tworzonych obiektów poprzez wskazanie ich prototypu. Nowe instancje tworzymy kopiując prototyp. Przykład: Edytor 3D klient tworzy obiekty różnych kształtów
Testowanie II. Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage).
Testowanie II Cel zajęć Celem zajęć jest zapoznanie studentów z oceną jakości testów przy wykorzystaniu metryk pokrycia kodu testami (ang. code coverage). Pokrycie kodu testami Jak już była mowa na poprzednich
Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz
Aplikacja internetowa zbudowana w oparciu o środowisko Visual Web Java Server Faces. Zarządzanie obiektami typu SesionBeans, RequestBeen i ApplicationBeans, Laboratorium 1 Wzorce oprogramowania lab1, Okres
Programowanie obiektowe
Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;
Co jeszcze mogą nam dać adnotacje? Adam Warski
Co jeszcze mogą nam dać adnotacje? Adam Warski Weryfikacja statyczna Sprawdzanie własności programu bez jego uruchomienia Weryfikacja statyczna Najprostszy przykład: Sprawdzanie typów Przy wywołaniu metody
Programowanie obiektowe
Programowanie obiektowe Podstawowe cechy i możliwości języka Scala mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 2017 1 / 32 mgr inż. Krzysztof Szwarc Programowanie obiektowe Informacje
Programowanie obiektowe
Programowanie obiektowe Wykład 7 Marcin Młotkowski 8 kwietnia 2015 Plan wykładu Z życia programisty, część 1 1 Z życia programisty, część 1 2 3 Z życia programisty, część 2 Model View Controller MVC w
Dziedziczenie. Tomasz Borzyszkowski
Dziedziczenie Tomasz Borzyszkowski Podstawy Zobacz: Dziedzictwo1.java Dziedzictwo2.java Dziedziczenie jest jedną z podstawowych cech OOP ponieważ umożliwia łatwe implementowanie klasyfikacji hierarchicznych.
Wywoływanie metod zdalnych
Wywoływanie metod zdalnych model systemu Wywoływanie metod zdalnych aplikacja kliencka interfejs obiekt serwer Podejście obiektowe do budowy systemów rozproszonych proxy szkielet sieć Istota podejścia
Projektowanie obiektowe. Roman Simiński Wzorce projektowe Wybrane wzorce strukturalne
Projektowanie obiektowe Roman Simiński roman.siminski@us.edu.pl www.siminskionline.pl Wzorce projektowe Wybrane wzorce strukturalne Fasada Facade Pattern 2 Wzorzec Fasada Facade Pattern koncepcja 3 Wzorzec
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
Całościowe podejście do testowania automatycznego dla programistów. (TDD, BDD, Spec. by Example, wzorce, narzędzia)
Program szkolenia: Całościowe podejście do testowania automatycznego dla programistów Ruby (TDD, BDD, Spec. by Example, wzorce, narzędzia) Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania:
Plik pobrano z Tytuł: Wzorce projektowe, cz. 2 Strategy Ostatnia aktualizacja:
Wzorce projektowe, cz. 2 Strategy Druga część z serii wpisów o wzorcach projektowych. Dziś omówię wzorzec Strategii (Strategy). Wstęp Strategia jest wzorcem projektowym, który definiuje rodzinę wymiennych
Typy zmiennych proste i złożone. Programowanie komputerów. Tablica. Złożone typy zmiennych. Klasa. Struktura
Programowanie komputerów Programowanie obiektowe. Typy zmiennych proste i złożone Typy zmiennych "wbudowane", tj. identyfikowane przez słowa kluczowe, są określane jako proste: int short long float double
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
Kurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Java: interfejsy i klasy wewnętrzne
Java: interfejsy i klasy wewnętrzne Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 INTERFEJSY Interfejs to opis co klasa implementująca dany interfejs powinna robić, ale bez określania
Dawid Gierszewski Adam Hanasko
Dawid Gierszewski Adam Hanasko Chcemy stworzyć klasę w której możemy przechowywać dwie zmienne dowolnych typów Tworzymy tyle różnych klas ile potrzeba: Class ParaInt{ int pierwszy; Int drugi; Class ParaButow{
MODELOWANIE OBIEKTOWE
(Wykład na podstawie literatury: M.Śmiałek Zrozumieć UML 2.0, Helion 2005) UML Unified Modeling Language (język do specyfikowania, wizualizowania, konstruowania i dokumentacji tzw. artefactów oraz czynności
Katalog przekształceń refaktoryzacyjnych cz. II
Katalog przekształceń refaktoryzacyjnych cz. II Prowadzący: Bartosz Walter Katalog przekształceń refaktoryzacyjnych cz. II 1 Agenda 1. Przekształcenia obiektów-wartości i obiektów-referencji 2. Przekształcenia
Projektowanie aplikacji internetowych laboratorium
Projektowanie aplikacji internetowych laboratorium Programowanie w języku Java Do realizacji projektu potrzebne jest zintegrowane środowisko programistyczne NetBeans 7 (zrzuty ekranów pochodzą z wersji
Programowanie obiektowe i język Java
Programowanie obiektowe i język Java Tomasz Głowacki Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii informatycznych i ich zastosowań
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
Techniki efektywnego testowania kodu dla programistów Java (Spock
Program szkolenia: Techniki efektywnego testowania kodu dla programistów Java (Spock/JUnit) Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Techniki efektywnego testowania kodu
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
Metody dostępu do danych
Metody dostępu do danych dr inż. Grzegorz Michalski Na podstawie materiałów dra inż. Juliusza Mikody Jak działa JDO Podstawowym zadaniem JDO jest umożliwienie aplikacjom Javy transparentnego umieszczenia
Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton
Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu
Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5
Program szkolenia: Test Driven Development (TDD) using Spock or JUnit 5 Informacje: Nazwa: Test Driven Development (TDD) using Spock or JUnit 5 Kod: craft-test-tdd Kategoria: Testowanie automatyczne Grupa
Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017
Wykład 13 14 czerwiec 2017 Java vs cpp - podobieństwa Podobny sposób definiowania klas. Występowanie typów podstawowych: boolean, char, byte, short, int, long, float, double. Podobna zasada definiowania
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 generowanie kodu. Marek.Berkan@e-point.pl. 4Developers, 26 marca 2010
4Developers, 26 marca 2010 Zakres wykładu O czym zamierzam opowiedzieć: Przyspieszenie tworzenia aplikacji Ułatwienie utrzymania aplikacji Budowanie kontraktów pomiędzy developerami a innymi uczestnikami
Programowanie obiektowe
Wykład 2 28 lutego 2019 Plan wykładu 1 2 3 4 5 Plan wykładu 1 2 3 4 5 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie; standardy ISO i ECMA; podobny składniowo do C++; Język C Krótka
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
Projektowanie obiektowe Wzorce projektowe
Projektowanie obiektowe Wzorce projektowe Gang of Four Kreacyjne wzorce projektowe (wzorce konstrukcyjne) 1 Roadmap Memento Factory Method Abstract Factory Prototype Builder 2 Wzorce konstrukcyjne wzorce
WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH. Mirosław Gołda, Programista Java
WYKORZYSTANIE JĘZYKA GROOVY W TESTACH JEDNOSTKOWYCH, INTEGRACYJNYCH I AUTOMATYCZNYCH Mirosław Gołda, Programista Java Agenda Kilka słów o języku Groovy Wpięcie Grooviego w projekt Springowy Testy jednostkowe
szkolenia pod drzewem Wybrane Techniki XP bnd 2008 Tomasz Włodarek. Materiał udostępniany na podstawie licencji Creative Commons (by-nc-nd) 1.00.
szkolenia pod drzewem Wybrane Techniki XP 1.00.00 bnd Wybrane techniki XP współwłasność kodu źródłowego (collective code ownership) częsta/ciągła integracja (continuous integration) programowanie w parach
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
Mechanizm dziedziczenia
Mechanizm dziedziczenia Programowanie obiektowe jako realizacja koncepcji ponownego wykorzystania kodu Jak przebiega proces dziedziczenia? Weryfikacja formalna poprawności dziedziczenia Realizacja dziedziczenia
Rysunkowy tutorial Możesz swobodnie dystrybuować ten plik jeśli pozostawisz go w nietkniętym stanie. Możesz także cytować jego fragmenty umieszczając w tekście odnośnik http://mbartyzel.blogspot.com Jak
Optimizing Programs with Intended Semantics
Interaktywna optymalizacja programów 26 kwietnia 2010 Spis treści Spis treści Wstęp Omówienie zaproponowanego algorytmu na przykładzie Wewnętrzna reprezentacja reguł dotyczących optymalizacji Wybrane szczegóły
Wzorce projektowe. dr inż. Marcin Pietroo
Wzorce projektowe dr inż. Marcin Pietroo Wzorce projektowe Wzorzec projektowy (ang. design pattern) w inżynierii oprogramowania, rozwiązanie często pojawiających się, powtarzalnych problemów projektowych.
Laboratorium z przedmiotu: Inżynieria Oprogramowania INEK Instrukcja 6
Instrukcja 6 Laboratorium 8 Opracowanie diagramów sekwencji dla wybranych przypadków użycia reprezentujących usługi oprogramowania wynikających również z wykonanych diagramów czynności; definicja operacji
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 02 Cel zajęć. Celem zajęć jest zapoznanie z praktycznymi aspektami projektowania oraz implementacji klas i obiektów z wykorzystaniem dziedziczenia.
Programowanie w Ruby
Programowanie w Ruby Wykład 13 Marcin Młotkowski 16 stycznia 2013 Plan wykładu Testowanie aplikacji w Ruby on Rails Testowanie modeli Testy funkcjonalne: testowanie kontrolerów Testy integracyjne Testowanie
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
Wprowadzenie db4o - podstawy db4o - technikalia Przydatne wiadomości. Wprowadzenie. db4o. Norbert Potocki. 1 czerwca 2009. Norbert Potocki db4o
Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie 1 czerwca 2009 Wprowadzenie - podstawy - technikalia Przydatne wiadomości Wprowadzenie = bjects = database for objects w pełni obiektowa
Scala - programowanie obiektowo-funkcyjne
Program szkolenia: Scala - programowanie obiektowofunkcyjne Informacje: Nazwa: Kod: Kategoria: Grupa docelowa: Czas trwania: Forma: Scala - programowanie obiektowo-funkcyjne Scala-Scala Scala developerzy
Wprowadzenie do Behaviordriven
Wprowadzenie do Behaviordriven development Jakub Kosiński Email: ja@ghandal.net Czym jest BDD? praktyka, powstała na podstawie TDD, wykorzystywana w zwinnych metodykach stworzona przez Dana Northa w 2003
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