From ec31cb345f6458f5591ba0711711bd4e8a2513ca Mon Sep 17 00:00:00 2001 From: Eugeny Konstantinov Date: Fri, 16 Sep 2022 09:04:04 +0300 Subject: [PATCH 1/5] lecture --- CourseApp/CourseApp.csproj | 2 +- CourseApp/Phone.cs | 29 +++++++---------------------- CourseApp/Program.cs | 22 ++++++++-------------- README.md | 35 ++++++++++++++++++++++++++++++++++- 4 files changed, 50 insertions(+), 38 deletions(-) diff --git a/CourseApp/CourseApp.csproj b/CourseApp/CourseApp.csproj index eb22147..707f86e 100644 --- a/CourseApp/CourseApp.csproj +++ b/CourseApp/CourseApp.csproj @@ -3,7 +3,7 @@ Exe net6.0 - True + False diff --git a/CourseApp/Phone.cs b/CourseApp/Phone.cs index 1c8e407..6c2b900 100644 --- a/CourseApp/Phone.cs +++ b/CourseApp/Phone.cs @@ -4,35 +4,20 @@ namespace CourseApp public class Phone { - private float diaonal; + public string Number; - public Phone(string name, float diagonal) + public void AcceptCall() { - Name = name; - Diagonal = diagonal; + Console.WriteLine("Принимаю звонок"); } - - public string Name { get; set; } - - public float Diagonal + public void CloseCall() { - get - { - return diaonal; - } - - set - { - if (value > 0 && value < 20) - { - this.diaonal = value; - } - } + Console.WriteLine("Завершаю звонок"); } - public void Show() + public void MakeCall(string phoneNumber) { - Console.WriteLine($"{Name} with diagonal {diaonal}"); + Console.WriteLine($"Звонок на номер {phoneNumber}"); } } } \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 030f047..6bb1883 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -6,21 +6,15 @@ public class Program { public static void Main(string[] args) { - Phone phone1 = new Phone("iPhone", -7); - phone1.Show(); - phone1.Diagonal = 7; - phone1.Show(); - phone1.Diagonal = -16; - phone1.Show(); + // int a = 5; + Phone phone = new Phone(); + phone.AcceptCall(); + phone.CloseCall(); + phone.MakeCall("+1234567"); + phone.CloseCall(); - Phone tablet = new Phone("Android", 6); - tablet.Diagonal = 6; - tablet.Show(); - tablet.Diagonal = -10; - tablet.Show(); - tablet.Diagonal = 8; - tablet.Show(); - Console.WriteLine("Hello World"); + Phone phone1 = new Phone(); + phone1.AcceptCall(); } } } diff --git a/README.md b/README.md index a79bfa3..2dbf55b 100644 --- a/README.md +++ b/README.md @@ -33,4 +33,37 @@ Finally you may work with migration (from `WebApplication` folder). The followin ``` dotnet ef migrations add InitialMigration -``` \ No newline at end of file +``` + +# Phones Store + +Существуют телефоны, которые могут осуществлять голосовой вызов, у них появляются методы - принять вызов, завершить вызов, позвонить. +Существуют сотовые телефоны, которые могут отправить сообщение, принять сообщение, отправить сообщение, а так сбросить вызов. +Существуют смартфоны (различающиеся операционной системой), определяются диагональю экрана, можно установить и запустить приложение +Все телефоны могут быть представлены в магазине. + +Phone: + Number {get; set;} + AcceptCall() + CloseCall() + MakeCall(phoneNumber) + + CellPhone: + PlayMusic() + SendMessage(number) + GetMessage() + DeclineCall() + + Smarphone + Diagonal {get; set;} + OsType {get; set;} + ConnectToInternet() + InstallApp() + StartApp() + UninstallApp() + + Iphone14: + lidar() + Redmi14: + Wallet() + From cc2ad8b788aa1be11e7369655c5983949db30ce6 Mon Sep 17 00:00:00 2001 From: Eugeny Konstantinov Date: Sat, 17 Sep 2022 13:32:27 +0300 Subject: [PATCH 2/5] inheritance, and polymorphysm basics --- CourseApp/CellPhone.cs | 40 ++++++++++++++++++++++++++++++++++++++++ CourseApp/Phone.cs | 35 ++++++++++++++++++++++++++++++++++- CourseApp/Program.cs | 29 +++++++++++++++++++++++++++-- README.md | 6 +++--- 4 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 CourseApp/CellPhone.cs diff --git a/CourseApp/CellPhone.cs b/CourseApp/CellPhone.cs new file mode 100644 index 0000000..0838aed --- /dev/null +++ b/CourseApp/CellPhone.cs @@ -0,0 +1,40 @@ +namespace CourseApp +{ + using System; + class CellPhone : Phone + { + + public string TrackName {get; set;} + + public CellPhone(string number, int year): base(number, year) + { + Console.WriteLine("CellPhone constructor clled"); + } + + public void PlayMusic() + { + Console.WriteLine($"Сейчас играет {TrackName}"); + } + + public void SendMessage(string number,string message) + { + Console.WriteLine($"Отправляем сообщение:{message} на номер {number}"); + } + + public void ReadMessage(string number) + { + Console.WriteLine($"Читаем сообщение от контакта {number}"); + } + + public void DeclineCall() + { + Console.WriteLine("Звонок сброшен"); + } + + public override void Display() + { + Console.WriteLine($"Сотовый телефон номер:{Number}, произведен {Year}"); + } + + } +} \ No newline at end of file diff --git a/CourseApp/Phone.cs b/CourseApp/Phone.cs index 6c2b900..99df67f 100644 --- a/CourseApp/Phone.cs +++ b/CourseApp/Phone.cs @@ -4,7 +4,40 @@ namespace CourseApp public class Phone { - public string Number; + public string Number {get; set;} + + private int year = 1880; + + public int Year + { + get + { + return year; + } + set + { + if (value >= 1880 && value <= 2022) + { + this.year = value; + } + } + } + + public Phone(): this("+7000000", 1990) + { + Console.WriteLine("Phone Simple constructor called"); + } + public Phone(string number, int year) + { + Number = number; + Year = year; + Console.WriteLine("Phone constructor called"); + } + + public virtual void Display() + { + Console.WriteLine($"Простой телефон номер:{Number}, произведен {Year}"); + } public void AcceptCall() { diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 6bb1883..3e8f200 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,14 +7,39 @@ public class Program public static void Main(string[] args) { // int a = 5; - Phone phone = new Phone(); + Phone phone = new Phone("+7000000", 1990); + Console.WriteLine(phone.Year); + phone.Display(); phone.AcceptCall(); phone.CloseCall(); phone.MakeCall("+1234567"); phone.CloseCall(); - Phone phone1 = new Phone(); + Phone phone1 = new Phone("+88888", 1700); + phone1.Display(); phone1.AcceptCall(); + + CellPhone nokia = new CellPhone("+99999", 2000); + nokia.Display(); + nokia.AcceptCall(); + nokia.CloseCall(); + + nokia.TrackName = "AAAAAA very good song"; + nokia.PlayMusic(); + nokia.SendMessage("+700000", "some message"); + nokia.Display(); + + CellPhone simens = nokia; + simens.Number = "+11111111111111"; + nokia.Display(); + simens.Display(); + + Phone poly = new CellPhone("+876543", 2000); + Console.WriteLine("-----------------"); + poly.Display(); + + CellPhone cell = (CellPhone)poly; + cell.Display(); } } } diff --git a/README.md b/README.md index 2dbf55b..2b7021f 100644 --- a/README.md +++ b/README.md @@ -50,9 +50,9 @@ Phone: CellPhone: PlayMusic() - SendMessage(number) - GetMessage() - DeclineCall() + SendMessage(number, message) + GetMessage() -> message + DeclineCall() Smarphone Diagonal {get; set;} From cc19fbf28c9a0d3e1620ae2f87144040527bbf11 Mon Sep 17 00:00:00 2001 From: Eugeny Konstantinov Date: Sat, 24 Sep 2022 14:01:37 +0300 Subject: [PATCH 3/5] inheritance --- CourseApp.Tests/CourseApp.Tests.csproj | 2 +- CourseApp.Tests/DemoTest.cs | 19 +++++++++++++ CourseApp/CellPhone.cs | 38 ++++++++++++++++++++++++++ CourseApp/CourseApp.csproj | 2 +- CourseApp/Phone.cs | 10 +++++-- CourseApp/Program.cs | 31 ++++++++++++++++----- 6 files changed, 91 insertions(+), 11 deletions(-) create mode 100644 CourseApp/CellPhone.cs diff --git a/CourseApp.Tests/CourseApp.Tests.csproj b/CourseApp.Tests/CourseApp.Tests.csproj index e43252f..bbf701d 100644 --- a/CourseApp.Tests/CourseApp.Tests.csproj +++ b/CourseApp.Tests/CourseApp.Tests.csproj @@ -2,7 +2,7 @@ net6.0 - True + False false diff --git a/CourseApp.Tests/DemoTest.cs b/CourseApp.Tests/DemoTest.cs index cf7cbb1..e96a55f 100644 --- a/CourseApp.Tests/DemoTest.cs +++ b/CourseApp.Tests/DemoTest.cs @@ -9,5 +9,24 @@ public void Test1() { Assert.True(true); } + + [Fact] + public void TestCreatePhone() + { + var phone = new Phone("Name", -1); + Assert.Equal("Name", phone.Name); + Assert.Equal(0, phone.Diagonal); + } + [Theory] + [InlineData(5, 12, 12)] + [InlineData(5, -1, 5)] + [InlineData(5, 20, 5)] + public void TestDiagonal(int initial,int change, int expected) + { + var phone = new Phone("Name", initial); + Assert.Equal(5, phone.Diagonal); + phone.Diagonal = change; + Assert.Equal(expected, phone.Diagonal); + } } } diff --git a/CourseApp/CellPhone.cs b/CourseApp/CellPhone.cs new file mode 100644 index 0000000..724185f --- /dev/null +++ b/CourseApp/CellPhone.cs @@ -0,0 +1,38 @@ +namespace CourseApp +{ + using System; + + public class CellPhone: Phone + { + + public CellPhone():base("nokia", 2) + { + Console.WriteLine("Cell phone without params"); + } + + public CellPhone(string name, int diagonal):base(name, diagonal) + { + Console.WriteLine("Cell phone with params"); + } + public void DeclineCall() + { + Console.WriteLine("Decline Call"); + } + + public void GetMessage() + { + Console.WriteLine("Getting text message"); + } + public void SendMessage() + { + Console.WriteLine("Sending message"); + } + + + public override string GetDisplay() + { + return $"CellPhone {Name} with diagonal {Diagonal}"; + } + + } +} \ No newline at end of file diff --git a/CourseApp/CourseApp.csproj b/CourseApp/CourseApp.csproj index eb22147..707f86e 100644 --- a/CourseApp/CourseApp.csproj +++ b/CourseApp/CourseApp.csproj @@ -3,7 +3,7 @@ Exe net6.0 - True + False diff --git a/CourseApp/Phone.cs b/CourseApp/Phone.cs index 1c8e407..3ae0bbd 100644 --- a/CourseApp/Phone.cs +++ b/CourseApp/Phone.cs @@ -6,8 +6,14 @@ public class Phone { private float diaonal; + public Phone(): this("Untitled", 0) + { + Console.WriteLine("Default Phone Constructor"); + } + public Phone(string name, float diagonal) { + Console.WriteLine("Phone Constructor with Parameters"); Name = name; Diagonal = diagonal; } @@ -30,9 +36,9 @@ public float Diagonal } } - public void Show() + public virtual string GetDisplay() { - Console.WriteLine($"{Name} with diagonal {diaonal}"); + return $"Phone {Name}"; } } } \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index 030f047..1303efc 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -7,20 +7,37 @@ public class Program public static void Main(string[] args) { Phone phone1 = new Phone("iPhone", -7); - phone1.Show(); + var phone2 = phone1; + phone1.GetDisplay(); phone1.Diagonal = 7; - phone1.Show(); + phone1.GetDisplay(); phone1.Diagonal = -16; - phone1.Show(); + phone1.GetDisplay(); Phone tablet = new Phone("Android", 6); tablet.Diagonal = 6; - tablet.Show(); + tablet.GetDisplay(); tablet.Diagonal = -10; - tablet.Show(); + tablet.GetDisplay(); tablet.Diagonal = 8; - tablet.Show(); - Console.WriteLine("Hello World"); + Console.WriteLine(tablet.GetDisplay()); + Console.WriteLine("--------------"); + + CellPhone cell1 = new CellPhone(); + cell1.Diagonal = 3; + cell1.Diagonal = -3; + Console.WriteLine(cell1.GetDisplay()); + + Phone cell2 = new CellPhone("ericson", 5); + // cell2.GetMessage(); + // cell2.SendMessage(); + // cell2.DeclineCall(); + Console.WriteLine(cell2.GetDisplay()); + + CellPhone cell3 = (CellPhone)cell2; + Console.WriteLine(cell3.GetDisplay()); + cell3.DeclineCall(); + } } } From f539ebae001fe6437954d232b2217efe018a5d94 Mon Sep 17 00:00:00 2001 From: Eugeny Konstantinov Date: Sat, 8 Oct 2022 14:08:02 +0300 Subject: [PATCH 4/5] Interfaces going to generics --- CourseApp/AndroidPhone.cs | 20 +++++++++++++ CourseApp/CellPhone.cs | 24 ++++++---------- CourseApp/FaceTime.cs | 15 ++++++++++ CourseApp/IAndroidApp.cs | 9 ++++++ CourseApp/IApplication.cs | 12 ++++++++ CourseApp/IApplication__ | 18 ++++++++++++ CourseApp/IDisplayable.cs | 9 ++++++ CourseApp/IOSPhone.cs | 15 ++++++++++ CourseApp/KeepApp.cs | 16 +++++++++++ CourseApp/LandlinePhone.cs | 27 +++++++++++++++++ CourseApp/Pen.cs | 12 ++++++++ CourseApp/Phone.cs | 14 ++++----- CourseApp/Program.cs | 59 +++++++++++++++++++++----------------- CourseApp/Smartphone.cs | 53 ++++++++++++++++++++++++++++++++++ CourseApp/Store.cs | 29 +++++++++++++++++++ 15 files changed, 281 insertions(+), 51 deletions(-) create mode 100644 CourseApp/AndroidPhone.cs create mode 100644 CourseApp/FaceTime.cs create mode 100644 CourseApp/IAndroidApp.cs create mode 100644 CourseApp/IApplication.cs create mode 100644 CourseApp/IApplication__ create mode 100644 CourseApp/IDisplayable.cs create mode 100644 CourseApp/IOSPhone.cs create mode 100644 CourseApp/KeepApp.cs create mode 100644 CourseApp/LandlinePhone.cs create mode 100644 CourseApp/Pen.cs create mode 100644 CourseApp/Smartphone.cs create mode 100644 CourseApp/Store.cs diff --git a/CourseApp/AndroidPhone.cs b/CourseApp/AndroidPhone.cs new file mode 100644 index 0000000..069679c --- /dev/null +++ b/CourseApp/AndroidPhone.cs @@ -0,0 +1,20 @@ +namespace CourseApp +{ + using System; + + public class AndroidPhone: SmartPhone + { + public AndroidPhone() : base("+70000000", "Pixel", 2022) + { + } + + public AndroidPhone(string number, string name, int diagonal) : base(number, name, diagonal) + { + } + + public virtual void InstallApp(IAndroidApp app) + { + base.InstallApp(app); + } + } +} \ No newline at end of file diff --git a/CourseApp/CellPhone.cs b/CourseApp/CellPhone.cs index 2fa2a0e..87f1e32 100644 --- a/CourseApp/CellPhone.cs +++ b/CourseApp/CellPhone.cs @@ -2,17 +2,16 @@ namespace CourseApp { using System; - public class CellPhone: Phone + public class CellPhone : Phone { private float diagonal; - public float Diagonal + public float Diagonal { get { return diagonal; } - set { if (value > 0 && value < 20) @@ -22,14 +21,14 @@ public float Diagonal } } - public string TrackName {get; set;} + public string TrackName { get; set; } - public CellPhone():base("+70000000","nokia", 2) + public CellPhone() : base("+70000000", "nokia", 2) { Console.WriteLine("Cell phone without params"); } - public CellPhone(string number, string name, int diagonal) + public CellPhone(string number, string name, int diagonal) : base(number, name, diagonal) { Console.WriteLine("Cell phone with params"); } @@ -45,25 +44,20 @@ public void SendMessage() { Console.WriteLine("Sending message"); } - - public override string GetDisplay() - { - return $"Сотовый телефон {Name} номер:{Number}, произведен {Year}"; - } public void PlayMusic() { Console.WriteLine($"Сейчас играет {TrackName}"); } - public void SendMessage(string number,string message) + public override string ToString() { - Console.WriteLine($"Отправляем сообщение:{message} на номер {number}"); + return $"Сотовый телефон {Name} номер:{Number}, произведен {Year}"; } - public void ReadMessage(string number) + public override string Display() { - Console.WriteLine($"Читаем сообщение от контакта {number}"); + return this.ToString(); } } diff --git a/CourseApp/FaceTime.cs b/CourseApp/FaceTime.cs new file mode 100644 index 0000000..9731fbf --- /dev/null +++ b/CourseApp/FaceTime.cs @@ -0,0 +1,15 @@ +namespace CourseApp +{ + using System; + + public class FaceTime: Application + { + public FaceTime(string name): base(name) + { + } + + public void CheckSecurity() + { + } + } +} \ No newline at end of file diff --git a/CourseApp/IAndroidApp.cs b/CourseApp/IAndroidApp.cs new file mode 100644 index 0000000..0a0fc25 --- /dev/null +++ b/CourseApp/IAndroidApp.cs @@ -0,0 +1,9 @@ +namespace CourseApp +{ + using System; + + public interface IAndroidApp + { + public void CheckGoogle(); + } +} \ No newline at end of file diff --git a/CourseApp/IApplication.cs b/CourseApp/IApplication.cs new file mode 100644 index 0000000..db8ebe4 --- /dev/null +++ b/CourseApp/IApplication.cs @@ -0,0 +1,12 @@ +namespace CourseApp +{ + using System; + + public interface IApplication + { + public void InstallApp(); + + public void RunApp(); + + } +} \ No newline at end of file diff --git a/CourseApp/IApplication__ b/CourseApp/IApplication__ new file mode 100644 index 0000000..34d5af5 --- /dev/null +++ b/CourseApp/IApplication__ @@ -0,0 +1,18 @@ +namespace CourseApp +{ + using System; + + public interface IApplication + { + public void InstallApp() + { + Console.WriteLine($"Installing {Name}..."); + } + + public void RunApp() + { + Console.WriteLine($"Running {Name}..."); + } + + } +} \ No newline at end of file diff --git a/CourseApp/IDisplayable.cs b/CourseApp/IDisplayable.cs new file mode 100644 index 0000000..34e174c --- /dev/null +++ b/CourseApp/IDisplayable.cs @@ -0,0 +1,9 @@ +namespace CourseApp +{ + using System; + + public interface IDisplayable + { + public string Display(); + } +} \ No newline at end of file diff --git a/CourseApp/IOSPhone.cs b/CourseApp/IOSPhone.cs new file mode 100644 index 0000000..dd4ff47 --- /dev/null +++ b/CourseApp/IOSPhone.cs @@ -0,0 +1,15 @@ +namespace CourseApp +{ + using System; + + public class IOSPhone: SmartPhone + { + public IOSPhone() : this("+70000000", "Pixel", 2022) + { + } + + public IOSPhone(string number, string name, int diagonal) : base(number, name, diagonal) + { + } + } +} \ No newline at end of file diff --git a/CourseApp/KeepApp.cs b/CourseApp/KeepApp.cs new file mode 100644 index 0000000..c8af3f1 --- /dev/null +++ b/CourseApp/KeepApp.cs @@ -0,0 +1,16 @@ +namespace CourseApp +{ + using System; + + public class KeepApp : Application, IAndroidApp + { + public KeepApp(string name) : base(name) + { + } + + public void CheckGoogle() + { + Console.WriteLine("Big brother watching you!"); + } + } +} \ No newline at end of file diff --git a/CourseApp/LandlinePhone.cs b/CourseApp/LandlinePhone.cs new file mode 100644 index 0000000..09118fa --- /dev/null +++ b/CourseApp/LandlinePhone.cs @@ -0,0 +1,27 @@ +namespace CourseApp +{ + using System; + + public class LandlinePhone : Phone, IDisplayable + { + + public LandlinePhone() : base("+70000000", "Проводной", 2) + { + } + + public LandlinePhone(string number, string name, int diagonal) : base(number, name, diagonal) + { + } + + public override string ToString() + { + return $"Проводной телефон {Name} номер:{Number}, произведен {Year}"; + } + + public override string Display() + { + return this.ToString(); + } + + } +} \ No newline at end of file diff --git a/CourseApp/Pen.cs b/CourseApp/Pen.cs new file mode 100644 index 0000000..96fd424 --- /dev/null +++ b/CourseApp/Pen.cs @@ -0,0 +1,12 @@ +namespace CourseApp +{ + using System; + + public class Pen : IDisplayable + { + public string Display() + { + return "Smart pen"; + } + } +} \ No newline at end of file diff --git a/CourseApp/Phone.cs b/CourseApp/Phone.cs index 766a4fd..8fb447c 100644 --- a/CourseApp/Phone.cs +++ b/CourseApp/Phone.cs @@ -2,18 +2,18 @@ namespace CourseApp { using System; - public class Phone + public abstract class Phone: IDisplayable { private int year = 1880; public string Name { get; set; } - public string Number {get; set;} + public string Number { get; set; } - public Phone(): this("+7000000","untitled", 1990) + public Phone() : this("+7000000", "untitled", 1990) { Console.WriteLine("Phone Simple constructor called"); } - public Phone(string number,string name, int year) + public Phone(string number, string name, int year) { Number = number; Year = year; @@ -36,11 +36,6 @@ public int Year } } - public virtual string GetDisplay() - { - return $"Простой телефон номер:{Number}, произведен {Year}"; - } - public void AcceptCall() { Console.WriteLine("Принимаю звонок"); @@ -55,5 +50,6 @@ public void MakeCall(string phoneNumber) Console.WriteLine($"Звонок на номер {phoneNumber}"); } + public abstract string Display(); } } \ No newline at end of file diff --git a/CourseApp/Program.cs b/CourseApp/Program.cs index fbb9b72..68fb39c 100644 --- a/CourseApp/Program.cs +++ b/CourseApp/Program.cs @@ -6,49 +6,54 @@ public class Program { public static void Main(string[] args) { - Phone phone1 = new Phone("+7000000","iPhone", -7); - phone1.AcceptCall(); - phone1.CloseCall(); - phone1.MakeCall("+1234567"); - phone1.CloseCall(); - + Phone phone1 = new LandlinePhone("+7000000","Проводной", -7); var phone2 = phone1; - phone1.GetDisplay(); - - Phone tablet = new Phone("+80000000","Android", 6); - tablet.GetDisplay(); - Console.WriteLine(tablet.GetDisplay()); - Console.WriteLine("--------------"); - CellPhone cell1 = new CellPhone(); cell1.Diagonal = 3; cell1.Diagonal = -3; - Console.WriteLine(cell1.GetDisplay()); - + Console.WriteLine(cell1); Phone cell2 = new CellPhone("+90000","ericson", 5); - Console.WriteLine(cell2.GetDisplay()); + Console.WriteLine(cell2); CellPhone cell3 = (CellPhone)cell2; - Console.WriteLine(cell3.GetDisplay()); - cell3.DeclineCall(); - + CellPhone nokia = new CellPhone("+99999", "Nokia", 2000); nokia.AcceptCall(); nokia.CloseCall(); nokia.TrackName = "AAAAAA very good song"; nokia.PlayMusic(); - nokia.SendMessage("+700000", "some message"); - - CellPhone simens = nokia; - simens.Number = "+11111111111111"; - Console.WriteLine(nokia.GetDisplay()); - Console.WriteLine(simens.GetDisplay()); - + Phone poly = new CellPhone("+876543", "MyPhone", 2000); Console.WriteLine("-----------------"); - Console.WriteLine(poly.GetDisplay()); + Console.WriteLine(poly); CellPhone cell = (CellPhone)poly; + + Console.WriteLine(poly); + + var smart = new SmartPhone(); + + var pen = new Pen(); + var store = new Store(); + store.AddItem(phone1); + store.AddItem(cell1); + store.AddItem(cell2); + store.AddItem(smart); + store.AddItem(pen); + Console.WriteLine("-------------------------"); + store.Show(); + Console.WriteLine("-------------------------"); + + var discord = new Application("Discord"); + smart.InstallApp(discord); + smart.StartApp("Discord"); + smart.StartApp("azaza"); + + Console.WriteLine("-------------------------"); + var pixel = new AndroidPhone("+77777", "GPixel", 2022); + var iphone = new IOSPhone("+78888888", "IPhone14", 2022); + pixel.InstallApp(discord); + iphone.InstallApp(discord); } } } diff --git a/CourseApp/Smartphone.cs b/CourseApp/Smartphone.cs new file mode 100644 index 0000000..0bcb0c2 --- /dev/null +++ b/CourseApp/Smartphone.cs @@ -0,0 +1,53 @@ +namespace CourseApp +{ + using System; + using System.Collections.Generic; + + public class SmartPhone : CellPhone, IDisplayable + { + private List apps; + + public string OsType { get; set; } + + public SmartPhone() : this("+70000000", "Pixel", 2022) + { + } + + public SmartPhone(string number, string name, int diagonal) : base(number, name, diagonal) + { + apps = new List(); + } + + public override string ToString() + { + return $"Проводной телефон {Name} номер:{Number}, произведен {Year}"; + } + + public override string Display() + { + return this.ToString(); + } + + public void ConnectToInternet() + { + Console.WriteLine("Connecting to the internet"); + } + public virtual void InstallApp(Application app) + { + apps.Add(app); + } + + public void StartApp(string appName) + { + foreach(Application app in apps) + { + if (app.Name == appName) + { + app.RunApp(); + return; + } + } + Console.WriteLine($"No such application {appName}"); + } + } +} \ No newline at end of file diff --git a/CourseApp/Store.cs b/CourseApp/Store.cs new file mode 100644 index 0000000..9d69d84 --- /dev/null +++ b/CourseApp/Store.cs @@ -0,0 +1,29 @@ +namespace CourseApp +{ + using System; + + public class Store + { + private IDisplayable[] storage; + private int index; + public Store() + { + storage = new IDisplayable[5]; + } + + public void AddItem(IDisplayable item) + { + storage[index] = item; + index++; + } + + public void Show() + { + for(int i=0; i Date: Sat, 22 Oct 2022 14:47:14 +0300 Subject: [PATCH 5/5] Added sample with generics --- CourseApp.Tests/CourseApp.Tests.csproj | 2 +- CourseApp.Tests/DemoTest.cs | 18 +++++++------ CourseApp/AndroidPhone.cs | 20 --------------- CourseApp/CourseApp.csproj | 2 +- CourseApp/FaceTime.cs | 15 ----------- CourseApp/IAndroidApp.cs | 9 ------- CourseApp/IApplication__ | 18 ------------- CourseApp/IOSPhone.cs | 15 ----------- CourseApp/KeepApp.cs | 16 ------------ CourseApp/Phones/AndroidPhone.cs | 21 +++++++++++++++ CourseApp/Phones/Application.cs | 16 ++++++++++++ CourseApp/{ => Phones}/CellPhone.cs | 28 ++++++++++++-------- CourseApp/Phones/FaceTime.cs | 27 ++++++++++++++++++++ CourseApp/Phones/IAndroidApp.cs | 7 +++++ CourseApp/{ => Phones}/IApplication.cs | 7 ++--- CourseApp/{ => Phones}/IDisplayable.cs | 4 +-- CourseApp/Phones/IIosApp.cs | 7 +++++ CourseApp/Phones/IOSPhone.cs | 16 ++++++++++++ CourseApp/Phones/KeepApp.cs | 27 ++++++++++++++++++++ CourseApp/{ => Phones}/LandlinePhone.cs | 12 ++++----- CourseApp/{ => Phones}/Pen.cs | 4 +-- CourseApp/{ => Phones}/Phone.cs | 15 +++++++---- CourseApp/{ => Phones}/Smartphone.cs | 34 +++++++++++++++---------- CourseApp/{ => Phones}/Store.cs | 8 +++--- CourseApp/Program.cs | 29 +++++++++++---------- 25 files changed, 209 insertions(+), 168 deletions(-) delete mode 100644 CourseApp/AndroidPhone.cs delete mode 100644 CourseApp/FaceTime.cs delete mode 100644 CourseApp/IAndroidApp.cs delete mode 100644 CourseApp/IApplication__ delete mode 100644 CourseApp/IOSPhone.cs delete mode 100644 CourseApp/KeepApp.cs create mode 100644 CourseApp/Phones/AndroidPhone.cs create mode 100644 CourseApp/Phones/Application.cs rename CourseApp/{ => Phones}/CellPhone.cs (88%) create mode 100644 CourseApp/Phones/FaceTime.cs create mode 100644 CourseApp/Phones/IAndroidApp.cs rename CourseApp/{ => Phones}/IApplication.cs (70%) rename CourseApp/{ => Phones}/IDisplayable.cs (67%) create mode 100644 CourseApp/Phones/IIosApp.cs create mode 100644 CourseApp/Phones/IOSPhone.cs create mode 100644 CourseApp/Phones/KeepApp.cs rename CourseApp/{ => Phones}/LandlinePhone.cs (63%) rename CourseApp/{ => Phones}/Pen.cs (77%) rename CourseApp/{ => Phones}/Phone.cs (89%) rename CourseApp/{ => Phones}/Smartphone.cs (59%) rename CourseApp/{ => Phones}/Store.cs (86%) diff --git a/CourseApp.Tests/CourseApp.Tests.csproj b/CourseApp.Tests/CourseApp.Tests.csproj index bbf701d..e43252f 100644 --- a/CourseApp.Tests/CourseApp.Tests.csproj +++ b/CourseApp.Tests/CourseApp.Tests.csproj @@ -2,7 +2,7 @@ net6.0 - False + True false diff --git a/CourseApp.Tests/DemoTest.cs b/CourseApp.Tests/DemoTest.cs index e96a55f..d211ca0 100644 --- a/CourseApp.Tests/DemoTest.cs +++ b/CourseApp.Tests/DemoTest.cs @@ -1,5 +1,6 @@ namespace CourseApp.Tests { + using Phones; using Xunit; public class DemoTest @@ -13,17 +14,18 @@ public void Test1() [Fact] public void TestCreatePhone() { - var phone = new Phone("Name", -1); + var phone = new LandlinePhone("123", "Name", -1); Assert.Equal("Name", phone.Name); - Assert.Equal(0, phone.Diagonal); + Assert.Equal(1880, phone.Year); } - [Theory] - [InlineData(5, 12, 12)] - [InlineData(5, -1, 5)] - [InlineData(5, 20, 5)] - public void TestDiagonal(int initial,int change, int expected) + + [Theory] + [InlineData(5, 12, 12)] + [InlineData(5, -1, 5)] + [InlineData(5, 20, 5)] + public void TestDiagonal(int initial, int change, int expected) { - var phone = new Phone("Name", initial); + var phone = new CellPhone("123", "Name", initial); Assert.Equal(5, phone.Diagonal); phone.Diagonal = change; Assert.Equal(expected, phone.Diagonal); diff --git a/CourseApp/AndroidPhone.cs b/CourseApp/AndroidPhone.cs deleted file mode 100644 index 069679c..0000000 --- a/CourseApp/AndroidPhone.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace CourseApp -{ - using System; - - public class AndroidPhone: SmartPhone - { - public AndroidPhone() : base("+70000000", "Pixel", 2022) - { - } - - public AndroidPhone(string number, string name, int diagonal) : base(number, name, diagonal) - { - } - - public virtual void InstallApp(IAndroidApp app) - { - base.InstallApp(app); - } - } -} \ No newline at end of file diff --git a/CourseApp/CourseApp.csproj b/CourseApp/CourseApp.csproj index 707f86e..eb22147 100644 --- a/CourseApp/CourseApp.csproj +++ b/CourseApp/CourseApp.csproj @@ -3,7 +3,7 @@ Exe net6.0 - False + True diff --git a/CourseApp/FaceTime.cs b/CourseApp/FaceTime.cs deleted file mode 100644 index 9731fbf..0000000 --- a/CourseApp/FaceTime.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace CourseApp -{ - using System; - - public class FaceTime: Application - { - public FaceTime(string name): base(name) - { - } - - public void CheckSecurity() - { - } - } -} \ No newline at end of file diff --git a/CourseApp/IAndroidApp.cs b/CourseApp/IAndroidApp.cs deleted file mode 100644 index 0a0fc25..0000000 --- a/CourseApp/IAndroidApp.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace CourseApp -{ - using System; - - public interface IAndroidApp - { - public void CheckGoogle(); - } -} \ No newline at end of file diff --git a/CourseApp/IApplication__ b/CourseApp/IApplication__ deleted file mode 100644 index 34d5af5..0000000 --- a/CourseApp/IApplication__ +++ /dev/null @@ -1,18 +0,0 @@ -namespace CourseApp -{ - using System; - - public interface IApplication - { - public void InstallApp() - { - Console.WriteLine($"Installing {Name}..."); - } - - public void RunApp() - { - Console.WriteLine($"Running {Name}..."); - } - - } -} \ No newline at end of file diff --git a/CourseApp/IOSPhone.cs b/CourseApp/IOSPhone.cs deleted file mode 100644 index dd4ff47..0000000 --- a/CourseApp/IOSPhone.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace CourseApp -{ - using System; - - public class IOSPhone: SmartPhone - { - public IOSPhone() : this("+70000000", "Pixel", 2022) - { - } - - public IOSPhone(string number, string name, int diagonal) : base(number, name, diagonal) - { - } - } -} \ No newline at end of file diff --git a/CourseApp/KeepApp.cs b/CourseApp/KeepApp.cs deleted file mode 100644 index c8af3f1..0000000 --- a/CourseApp/KeepApp.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace CourseApp -{ - using System; - - public class KeepApp : Application, IAndroidApp - { - public KeepApp(string name) : base(name) - { - } - - public void CheckGoogle() - { - Console.WriteLine("Big brother watching you!"); - } - } -} \ No newline at end of file diff --git a/CourseApp/Phones/AndroidPhone.cs b/CourseApp/Phones/AndroidPhone.cs new file mode 100644 index 0000000..19a0bb3 --- /dev/null +++ b/CourseApp/Phones/AndroidPhone.cs @@ -0,0 +1,21 @@ +namespace Phones +{ + public class AndroidPhone : SmartPhone + where T : IAndroidApp + { + public AndroidPhone() + : base("+70000000", "Pixel", 2022) + { + } + + public AndroidPhone(string number, string name, int diagonal) + : base(number, name, diagonal) + { + } + + public override void AddApp(T app) + { + base.AddApp(app); + } + } +} \ No newline at end of file diff --git a/CourseApp/Phones/Application.cs b/CourseApp/Phones/Application.cs new file mode 100644 index 0000000..56b76d8 --- /dev/null +++ b/CourseApp/Phones/Application.cs @@ -0,0 +1,16 @@ +namespace Phones +{ + public abstract class Application : IApplication + { + public Application(string name) + { + this.Name = name; + } + + public string Name { get; set; } + + public abstract void InstallApp(); + + public abstract void RunApp(); + } +} \ No newline at end of file diff --git a/CourseApp/CellPhone.cs b/CourseApp/Phones/CellPhone.cs similarity index 88% rename from CourseApp/CellPhone.cs rename to CourseApp/Phones/CellPhone.cs index 87f1e32..2a85378 100644 --- a/CourseApp/CellPhone.cs +++ b/CourseApp/Phones/CellPhone.cs @@ -1,4 +1,4 @@ -namespace CourseApp +namespace Phones { using System; @@ -6,12 +6,26 @@ public class CellPhone : Phone { private float diagonal; + public CellPhone() + : base("+70000000", "nokia", 2) + { + Console.WriteLine("Cell phone without params"); + } + + public CellPhone(string number, string name, int diagonal) + : base(number, name, 2000) + { + this.Diagonal = diagonal; + Console.WriteLine("Cell phone with params"); + } + public float Diagonal { get { return diagonal; } + set { if (value > 0 && value < 20) @@ -23,23 +37,16 @@ public float Diagonal public string TrackName { get; set; } - public CellPhone() : base("+70000000", "nokia", 2) - { - Console.WriteLine("Cell phone without params"); - } - - public CellPhone(string number, string name, int diagonal) : base(number, name, diagonal) - { - Console.WriteLine("Cell phone with params"); - } public void DeclineCall() { Console.WriteLine("Decline Call"); } + public void GetMessage() { Console.WriteLine("Getting text message"); } + public void SendMessage() { Console.WriteLine("Sending message"); @@ -59,6 +66,5 @@ public override string Display() { return this.ToString(); } - } } \ No newline at end of file diff --git a/CourseApp/Phones/FaceTime.cs b/CourseApp/Phones/FaceTime.cs new file mode 100644 index 0000000..9c19535 --- /dev/null +++ b/CourseApp/Phones/FaceTime.cs @@ -0,0 +1,27 @@ +namespace Phones +{ + using System; + + public class FaceTime : Application, IIOsApp + { + public FaceTime(string name) + : base(name) + { + } + + public void CheckWallet() + { + Console.WriteLine("Checking FaceTimeApp"); + } + + public override void InstallApp() + { + Console.WriteLine("Installing FaceTime"); + } + + public override void RunApp() + { + Console.WriteLine("Running FaceTime"); + } + } +} \ No newline at end of file diff --git a/CourseApp/Phones/IAndroidApp.cs b/CourseApp/Phones/IAndroidApp.cs new file mode 100644 index 0000000..b5b05d6 --- /dev/null +++ b/CourseApp/Phones/IAndroidApp.cs @@ -0,0 +1,7 @@ +namespace Phones +{ + public interface IAndroidApp : IApplication + { + public void CheckGoogle(); + } +} \ No newline at end of file diff --git a/CourseApp/IApplication.cs b/CourseApp/Phones/IApplication.cs similarity index 70% rename from CourseApp/IApplication.cs rename to CourseApp/Phones/IApplication.cs index db8ebe4..58e3000 100644 --- a/CourseApp/IApplication.cs +++ b/CourseApp/Phones/IApplication.cs @@ -1,12 +1,9 @@ -namespace CourseApp +namespace Phones { - using System; - public interface IApplication { public void InstallApp(); - - public void RunApp(); + public void RunApp(); } } \ No newline at end of file diff --git a/CourseApp/IDisplayable.cs b/CourseApp/Phones/IDisplayable.cs similarity index 67% rename from CourseApp/IDisplayable.cs rename to CourseApp/Phones/IDisplayable.cs index 34e174c..879fd74 100644 --- a/CourseApp/IDisplayable.cs +++ b/CourseApp/Phones/IDisplayable.cs @@ -1,7 +1,5 @@ -namespace CourseApp +namespace Phones { - using System; - public interface IDisplayable { public string Display(); diff --git a/CourseApp/Phones/IIosApp.cs b/CourseApp/Phones/IIosApp.cs new file mode 100644 index 0000000..4871385 --- /dev/null +++ b/CourseApp/Phones/IIosApp.cs @@ -0,0 +1,7 @@ +namespace Phones +{ + public interface IIOsApp : IApplication + { + public void CheckWallet(); + } +} \ No newline at end of file diff --git a/CourseApp/Phones/IOSPhone.cs b/CourseApp/Phones/IOSPhone.cs new file mode 100644 index 0000000..dcfb7f0 --- /dev/null +++ b/CourseApp/Phones/IOSPhone.cs @@ -0,0 +1,16 @@ +namespace Phones +{ + public class IOSPhone : SmartPhone + where T : IIOsApp + { + public IOSPhone() + : this("+70000000", "Pixel", 2022) + { + } + + public IOSPhone(string number, string name, int diagonal) + : base(number, name, diagonal) + { + } + } +} \ No newline at end of file diff --git a/CourseApp/Phones/KeepApp.cs b/CourseApp/Phones/KeepApp.cs new file mode 100644 index 0000000..2122db0 --- /dev/null +++ b/CourseApp/Phones/KeepApp.cs @@ -0,0 +1,27 @@ +namespace Phones +{ + using System; + + public class KeepApp : Application, IAndroidApp + { + public KeepApp(string name) + : base(name) + { + } + + public void CheckGoogle() + { + Console.WriteLine("Big brother watching you!"); + } + + public override void InstallApp() + { + Console.WriteLine("Installing Keep"); + } + + public override void RunApp() + { + Console.WriteLine("Running Keep"); + } + } +} \ No newline at end of file diff --git a/CourseApp/LandlinePhone.cs b/CourseApp/Phones/LandlinePhone.cs similarity index 63% rename from CourseApp/LandlinePhone.cs rename to CourseApp/Phones/LandlinePhone.cs index 09118fa..db03b3b 100644 --- a/CourseApp/LandlinePhone.cs +++ b/CourseApp/Phones/LandlinePhone.cs @@ -1,15 +1,14 @@ -namespace CourseApp +namespace Phones { - using System; - public class LandlinePhone : Phone, IDisplayable { - - public LandlinePhone() : base("+70000000", "Проводной", 2) + public LandlinePhone() + : base("+70000000", "Проводной", 2) { } - public LandlinePhone(string number, string name, int diagonal) : base(number, name, diagonal) + public LandlinePhone(string number, string name, int year) + : base(number, name, year) { } @@ -22,6 +21,5 @@ public override string Display() { return this.ToString(); } - } } \ No newline at end of file diff --git a/CourseApp/Pen.cs b/CourseApp/Phones/Pen.cs similarity index 77% rename from CourseApp/Pen.cs rename to CourseApp/Phones/Pen.cs index 96fd424..eca55b6 100644 --- a/CourseApp/Pen.cs +++ b/CourseApp/Phones/Pen.cs @@ -1,7 +1,5 @@ -namespace CourseApp +namespace Phones { - using System; - public class Pen : IDisplayable { public string Display() diff --git a/CourseApp/Phone.cs b/CourseApp/Phones/Phone.cs similarity index 89% rename from CourseApp/Phone.cs rename to CourseApp/Phones/Phone.cs index 8fb447c..90e52b8 100644 --- a/CourseApp/Phone.cs +++ b/CourseApp/Phones/Phone.cs @@ -1,14 +1,13 @@ -namespace CourseApp +namespace Phones { using System; - public abstract class Phone: IDisplayable + public abstract class Phone : IDisplayable { private int year = 1880; - public string Name { get; set; } - public string Number { get; set; } - public Phone() : this("+7000000", "untitled", 1990) + public Phone() + : this("+7000000", "untitled", 1990) { Console.WriteLine("Phone Simple constructor called"); } @@ -21,12 +20,17 @@ public Phone(string number, string name, int year) Console.WriteLine("Phone constructor called"); } + public string Name { get; set; } + + public string Number { get; set; } + public int Year { get { return year; } + set { if (value >= 1880 && value <= 2022) @@ -40,6 +44,7 @@ public void AcceptCall() { Console.WriteLine("Принимаю звонок"); } + public void CloseCall() { Console.WriteLine("Завершаю звонок"); diff --git a/CourseApp/Smartphone.cs b/CourseApp/Phones/Smartphone.cs similarity index 59% rename from CourseApp/Smartphone.cs rename to CourseApp/Phones/Smartphone.cs index 0bcb0c2..75709d6 100644 --- a/CourseApp/Smartphone.cs +++ b/CourseApp/Phones/Smartphone.cs @@ -1,23 +1,26 @@ -namespace CourseApp +namespace Phones { using System; using System.Collections.Generic; - public class SmartPhone : CellPhone, IDisplayable + public class SmartPhone : CellPhone, IDisplayable + where T : IApplication { - private List apps; + private List apps; - public string OsType { get; set; } - - public SmartPhone() : this("+70000000", "Pixel", 2022) - { + public SmartPhone() + : this("+70000000", "Pixel", 2022) + { } - public SmartPhone(string number, string name, int diagonal) : base(number, name, diagonal) + public SmartPhone(string number, string name, int diagonal) + : base(number, name, diagonal) { - apps = new List(); + apps = new List(); } + public string OsType { get; set; } + public override string ToString() { return $"Проводной телефон {Name} номер:{Number}, произведен {Year}"; @@ -32,22 +35,25 @@ public void ConnectToInternet() { Console.WriteLine("Connecting to the internet"); } - public virtual void InstallApp(Application app) + + public virtual void AddApp(T app) { + app.InstallApp(); apps.Add(app); } - public void StartApp(string appName) + public void StartApp(T application) { - foreach(Application app in apps) + foreach (T app in apps) { - if (app.Name == appName) + if (application.Equals(app)) { app.RunApp(); return; } } - Console.WriteLine($"No such application {appName}"); + + Console.WriteLine($"No such application "); } } } \ No newline at end of file diff --git a/CourseApp/Store.cs b/CourseApp/Phones/Store.cs similarity index 86% rename from CourseApp/Store.cs rename to CourseApp/Phones/Store.cs index 9d69d84..4255813 100644 --- a/CourseApp/Store.cs +++ b/CourseApp/Phones/Store.cs @@ -1,4 +1,4 @@ -namespace CourseApp +namespace Phones { using System; @@ -6,10 +6,11 @@ public class Store { private IDisplayable[] storage; private int index; + public Store() { storage = new IDisplayable[5]; - } + } public void AddItem(IDisplayable item) { @@ -19,11 +20,10 @@ public void AddItem(IDisplayable item) public void Show() { - for(int i=0; i(); var pen = new Pen(); var store = new Store(); @@ -44,16 +45,18 @@ public static void Main(string[] args) store.Show(); Console.WriteLine("-------------------------"); - var discord = new Application("Discord"); - smart.InstallApp(discord); - smart.StartApp("Discord"); - smart.StartApp("azaza"); + var faceTime = new FaceTime("FaceTime"); + smart.AddApp(faceTime); + smart.StartApp(faceTime); Console.WriteLine("-------------------------"); - var pixel = new AndroidPhone("+77777", "GPixel", 2022); - var iphone = new IOSPhone("+78888888", "IPhone14", 2022); - pixel.InstallApp(discord); - iphone.InstallApp(discord); + var pixel = new AndroidPhone("+77777", "GPixel", 2022); + var iphone = new IOSPhone("+78888888", "IPhone14", 2022); + + // Следующая строка не будет работать + // pixel.InstallApp(faceTime); + pixel.AddApp(new KeepApp("Keep")); + iphone.AddApp(faceTime); } } }