Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

6. ELŐADÁS Szoftvertechnológia Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014 1.

Hasonló előadás


Az előadások a következő témára: "6. ELŐADÁS Szoftvertechnológia Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014 1."— Előadás másolata:

1 6. ELŐADÁS Szoftvertechnológia Dr. Johanyák Zs. Csaba - Szoftvertechnológia

2 Tervezési minták Eddig Singleton (Egyke) Simple Factory Ma Adapter (Illesztő) Bridge (Híd) Composite (Összetétel) Observer (Megfigyelő) Strategy Dependency injection Template Method (Sablonfüggvény) MVC,MVP Dr. Johanyák Zs. Csaba - Szoftvertechnológia

3 Adapter - Illesztő A cél egy olyan új osztály/objektum létrehozása, ami a korábbi osztály felhasználásával megvalósít egy elvárt új interfészt Például: a korábbi osztály rendelkezik Vezetéknév és Utónév tulajdonságokkal, de Teljesnév tulajdonsággal nem, és nekünk erre a tulajdonságra van szükségünk Megvalósítási módok Öröklődés Beágyazás Kiegészítés Bővítő metódus Dr. Johanyák Zs. Csaba - Szoftvertechnológia

4 Megoldás öröklődéssel public class Alap {public Alap(string V, string U) {Vezetéknév = V; Utónév = U; } public string Vezetéknév{ get; set; } public string Utónév { get; set; } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

5 Megoldás öröklődéssel public class Leszármazott:Alap { public Leszármazott(string V, string U):base(V,U){} public string Teljesnév { get { return Vezetéknév + " " + Utónév; } } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

6 Megoldás öröklődéssel static void Main(string[] args) { Leszármazott l = new Leszármazott("Duli", "Fuli"); Console.WriteLine(l.Teljesnév); Console.ReadLine(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

7 Megoldás beágyazással public class Beágyazott {Alap Alap; public string Teljesnév { get { return Alap.Vezetéknév + " " + Alap.Utónév; } } public string Vezetéknév { get { return Alap.Vezetéknév; } set { Alap.Vezetéknév = value; } } public string Utónév { get { return Alap.Utónév; } set { Alap.Utónév = value; } } public Beágyazott(string V,string U) { Alap = new Alap(V,U); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

8 Megoldás beágyazással static void Main(string[] args) { Beágyazott b = new Beágyazott("Zsákos", "Bilbó"); Console.WriteLine(b.Teljesnév); Console.ReadLine(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

9 Megoldás kiegészítéssel public partial class Alap {public Alap(string V, string U) {Vezetéknév = V; Utónév = U; } public string Vezetéknév { get; set; } public string Utónév { get; set; } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

10 Megoldás kiegészítéssel public partial class Alap { public string Teljesnév { get { return Vezetéknév + " " + Utónév; } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

11 Megoldás kiegészítéssel static void Main(string[] args) { Alap a = new Alap("Zsákos", "Frodó"); Console.WriteLine(a.Teljesnév); Console.ReadLine(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

12 Megoldás bővítő metódussal Dr. Johanyák Zs. Csaba - Szoftvertechnológia

13 Megoldás bővítő metódussal public sealed class Alap {public Alap(string V, string U) {Vezetéknév = V; Utónév = U; } public string Vezetéknév { get; set; } public string Utónév { get; set; } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

14 Megoldás bővítő metódussal public static class Bővítő { public static string Teljesnév(this Alap a) { return a.Vezetéknév + " " + a.Utónév; } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

15 Bridge - Híd Egy képzeletbeli okos TV, amivel nézhetünk Kábel TV-t Műholdas adást IPTV-t A felhasználó lekérheti a műsort (Guide) és indíthatja a kiválasztott műsorforrás megtekintését Absztrakció: műsor lekérés, indítás Minden műsorforrás esetén más a megvalósítás Dr. Johanyák Zs. Csaba - Szoftvertechnológia Forrás: 15

16 Dr. Johanyák Zs. Csaba - Szoftvertechnológia

17 Interfész interface IVideoSource { string GetTvGuide(); string PlayVideo(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

18 Megvalósítás class LocalCabelTv : IVideoSource { const string SOURCE_NAME = "Local Cabel TV"; string IVideoSource.GetTvGuide() { return string.Format("Getting TV guide from - {0}", SOURCE_NAME); } string IVideoSource.PlayVideo() { return string.Format("Playing - {0}", SOURCE_NAME); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

19 LocalDishTv class LocalDishTv : IVideoSource { const string SOURCE_NAME = "Local DISH TV"; string IVideoSource.GetTvGuide() { return string.Format("Getting TV guide from - {0}", SOURCE_NAME); } string IVideoSource.PlayVideo() { return string.Format("Playing - {0}", SOURCE_NAME); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

20 IPTvService class IPTvService: IVideoSource { const string SOURCE_NAME = "IP TV"; string IVideoSource.GetTvGuide() { return string.Format("Getting TV guide from - {0}", SOURCE_NAME); } string IVideoSource.PlayVideo() { return string.Format("Playing - {0}", SOURCE_NAME); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

21 RefinedAbstraction class MySuperSmartTV {IVideoSource currentVideoSource = null; public IVideoSource VideoSource { get { return currentVideoSource; } set { currentVideoSource = value;} } public void ShowTvGuide() { if (currentVideoSource != null) { Console.WriteLine(currentVideoSource.GetTvGuide()); } else { Console.WriteLine("Please select a Video Source to get TV"+ " guide from"); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

22 RefinedAbstraction public void PlayTV() { if (currentVideoSource != null) { Console.WriteLine(currentVideoSource.PlayVideo()); } else { Console.WriteLine( "Please select a Video Source to play"); } } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

23 class SuperSmartTvController { static void Main(string[] args) { MySuperSmartTV myTv = new MySuperSmartTV(); Console.WriteLine("Select A source to get TV Guide and Play"); Console.WriteLine("1. Local Cable TV\n2. Local Dish TV\n3. IP TV"); ConsoleKeyInfo input = Console.ReadKey(); switch (input.KeyChar) { case '1': myTv.VideoSource = new LocalCabelTv(); break; case '2': myTv.VideoSource = new LocalDishTv(); break; case '3': myTv.VideoSource = new IPTvService(); break; } myTv.ShowTvGuide(); myTv.PlayTV(); } } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

24 Futás Dr. Johanyák Zs. Csaba - Szoftvertechnológia

25 Composite - Összetétel Forrás: Mathias Bartoll, Nori Ahari, Oliver C. Moldez: Design Patterns in C# Dr. Johanyák Zs. Csaba - Szoftvertechnológia

26 Az összetétel minta szerkezete Dr. Johanyák Zs. Csaba - Szoftvertechnológia

27 Implemen- táció Dr. Johanyák Zs. Csaba - Szoftvertechnológia

28 Dr. Johanyák Zs. Csaba - Szoftvertechnológia line osztály levél

29 Picture osztály Dr. Johanyák Zs. Csaba - Szoftvertechnológia Picture osztály csomópont

30 Observer - Megfigyelő Dr. Johanyák Zs. Csaba - Szoftvertechnológia

31 Közzétevő osztály Dr. Johanyák Zs. Csaba - Szoftvertechnológia

32 Megfigyelő (feliratkozó) Dr. Johanyák Zs. Csaba - Szoftvertechnológia

33 Fel/leiratkozás Dr. Johanyák Zs. Csaba - Szoftvertechnológia

34 Strategy - stratégia Dr. Johanyák Zs. Csaba - Szoftvertechnológia

35 Megoldások/stratégiák Dr. Johanyák Zs. Csaba - Szoftvertechnológia

36 Illesztő modul Dr. Johanyák Zs. Csaba - Szoftvertechnológia

37 Használat Dr. Johanyák Zs. Csaba - Szoftvertechnológia

38 Dependency Injection Interfész konkrét osztálynév helyett A Client csak az IService interfészről kell tudjon, az azt megvalósító Service osztály nevét nem kell ismerje Megoldások Constructor Injection Property (Setter) Injection Method Injection Dr. Johanyák Zs. Csaba - Szoftvertechnológia

39 Constructor Injection A szolgáltatást nyújtó osztály public interface IService { void Serve(); } public class Service : IService { public void Serve() { Console.WriteLine("Service Called"); //To Do: Some Stuff } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

40 Az ügyfél osztály public class Client { private IService _service; public Client(IService service) { this._service = service; } public void Start() { Console.WriteLine("Service Started"); this._service.Serve(); //To Do: Some Stuff } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

41 Használat class Program { static void Main(string[] args) { client = new Client(new Service()); client.Start(); Console.ReadKey(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

42 Property (Setter) Injection A szolgáltatást nyújtó osztály public interface IService { void Serve(); } public class Service : IService { public void Serve() { Console.WriteLine("Service Called"); //To Do: Some Stuff } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

43 Az ügyfél osztály public class Client { private IService _service; public IService Service { set { this._service = value; } public void Start() { Console.WriteLine("Service Started"); this._service.Serve(); //To Do: Some Stuff } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

44 Használat class Program { static void Main(string[] args) { Client client = new Client(); client.Service = new Service(); client.Start(); Console.ReadKey(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

45 Method Injection A szolgáltatást nyújtó osztály public interface IService { void Serve(); } public class Service : IService { public void Serve() { Console.WriteLine("Service Called"); //To Do: Some Stuff } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

46 Az ügyfél osztály public class Client { private IService _service; public void Start(IService Service) { this._service=Service Console.WriteLine("Service Started"); this._service.Serve(); //To Do: Some Stuff } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

47 Használat class Program { static void Main(string[] args) { Client client = new Client(); client.Start(new Service()); Console.ReadKey(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

48 Template Method - Sablonfüggvény Dr. Johanyák Zs. Csaba - Szoftvertechnológia

49 Az absztrakt ős osztály abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); // The "Template method" public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

50 Leszármazott - A class ConcreteClassA : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("ConcreteClassA.PrimitiveOperation1()"); } public override void PrimitiveOperation2() { Console.WriteLine("ConcreteClassA.PrimitiveOperation2()"); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

51 Leszármazott - B class ConcreteClassB : AbstractClass { public override void PrimitiveOperation1() { Console.WriteLine("ConcreteClassB.PrimitiveOperation1()"); } public override void PrimitiveOperation2() { Console.WriteLine("ConcreteClassB.PrimitiveOperation2()"); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

52 Használat class MainApp { /// /// Entry point into console application. /// static void Main() { AbstractClass aA = new ConcreteClassA(); aA.TemplateMethod(); AbstractClass aB = new ConcreteClassB(); aB.TemplateMethod(); // Wait for user Console.ReadKey(); } Dr. Johanyák Zs. Csaba - Szoftvertechnológia

53 Model-View-Controller (MVC) Dr. Johanyák Zs. Csaba - Szoftvertechnológia Forrás:

54 MVC alapelvek „Loose coupling” „Program to the interface” Eredmények Jobb karbantarthatóság Könnyebb újrahasznosíthatóság Dr. Johanyák Zs. Csaba - Szoftvertechnológia

55 Model-View-Presenter (MVP) Dr. Johanyák Zs. Csaba - Szoftvertechnológia Forrás:

56 MVC MVP Dr. Johanyák Zs. Csaba - Szoftvertechnológia

57 MVVM Dr. Johanyák Zs. Csaba - Szoftvertechnológia View XAML, Code Behind Unit Tests Integration Tests ViewModel Properties, Commands, View Logic Bindings Actions Model Service Proxies Web Data Events Behavior Forrás:

58 Tervezési minták osztályozása Dr. Johanyák Zs. Csaba - Szoftvertechnológia Forrás:http://nik.uni-obuda.hu/erdelyi/CASE/DesignPattern_Singleton.pdf 58

59 Tervezési minták osztályozása LétrehozásiSzerkezetiViselkedési Singleton (Egyke)AdapterObserver Simple FactoryBridgeStrategy Dependency InjectionCompositeTemplate Method MVC MVP Dr. Johanyák Zs. Csaba - Szoftvertechnológia


Letölteni ppt "6. ELŐADÁS Szoftvertechnológia Dr. Johanyák Zs. Csaba - Szoftvertechnológia - 2014 1."

Hasonló előadás


Google Hirdetések