Professional Documents
Culture Documents
of Contents
0
1
1.1
1.2
1.3
Iterator 1.4
1.5
1.6
1.7
1.8
2
howtocode.com.bd
| HowToCode | |
- , , ,
...
Like 18 Share
BuzzWord
,
/ %
, %
Fighter class
class Program
{
static void Main(string[] args)
{
var fighter = new Fighter();
var random = new Random();
Console.ReadKey();
}
}
class library
Mood
OCP (Open Close Principle )
OCP class/entity
class
IFighter
Fight()
class
IFighter
SRP
ClientCode
class Program
{
static void Main(string[] args)
{
var fighter = new Fighter();
var random = new Random();
Console.ReadKey();
}
}
class library
Fighter class
/ (
Sorting) switch if else
Define a family of algorithms, encapsulate each one, and make them interchangeable.
Strategy lets the algorithm vary independently from clients that use it.
, new
Person class
ClientCode
new
Person class :P
class
return person;
}
}
Console.WriteLine("Before Cloning.......");
Console.WriteLine("Name:{0} and Email:{1}", person.Name, person.Email);
10
.NET MemberwiseClone()
Object class Protected
Console.WriteLine("Before Cloning.......");
Console.WriteLine("Name:{0} and Email:{1}", person.Name, person.Email);
ShallowCopy
DeepCopy.
ShallowCopy ?? -
11
ShallowCopy ,
ShallowCopy
ShallowCopy
Person class
Person Address
Address
, Address
Address
12
person.Name = "Person";
person.Email = "xyz@mail.com";
person.Address.Street = "221B";
Console.WriteLine("After Cloning..............");
/*showing person1's Address in person object*/
Console.WriteLine("Street:{0}",person.Address.Street);
}
}
Address
Address Address
DeepCloning
DeepCloning:
DeepCloning MemberwiseClone()
13
person.Name = "Person";
person.Email = "xyz@mail.com";
person.Address.Street = "221B";
Console.WriteLine("Before Cloning.......");
Console.WriteLine("Name:{0} and Email:{1}, Street:{2}", person.Name, person.Email, person
Console.WriteLine("After Cloning.......");
Console.WriteLine("Name:{0} and Email:{1}, Street:{2}", person1.Name, person1.Email, pers
}
}
ShallowCopy
( )
14
DeepCopy class
[Serializable] Person class clone()
[Serializable]
public class Address
{
public String Street { get; set; }
}
[Serializable]
public class Person : IClone
{
public String Name { get; set; }
public String Email { get; set; }
public Address Address { get; set; }
public Person()
{
Address = new Address();
}
public Object Clone()
{
using (Stream stream = new MemoryStream())
{
var binaryFormatter = new BinaryFormatter();
binaryFormatter.Serialize(stream, new Person());
stream.Seek(0, SeekOrigin.Begin);
return (Person)binaryFormatter.Deserialize(stream);
}
}
}
, DeepCopy
15
person.Name = "Person";
person.Email = "xyz@mail.com";
person.Address.Street = "221B";
Console.WriteLine("Before Cloning.......");
Console.WriteLine("Name:{0} and Email:{1}, Street:{2}", person.Name, person.Email, person
Console.WriteLine("After Cloning.......");
Console.WriteLine("Name:{0} and Email:{1}, Street:{2}", person1.Name, person1.Email, pers
}
}
:)
16
, ,
/
C# class
class
Class
17
DLL DLL
class
class
class Array
Array Collection Framework
List,Dictionary,HashTable
class
class
?? Calculator class
GetSum() GetTotalSum()
GetSum()
Array GetTotalSum()
Array
Array
ClientCode
18
class Program
{
static void Main(string[] args)
{
CalculatorAdapter calculator = new CalculatorAdapter();
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
var sum = calculator.GetTotalSum(numbers);
Console.WriteLine(sum);
}
}
CalculatorAdapter Adapter
Calculator class Calculator class
Array
ClientCode
;)
Convert the interface of a class into another interface clients expect. Adapter lets
classes work together that couldnt otherwise because of incompatible interfaces.
19
Iterator
(
)
List
Array
Iterator 20
Iterator 21
Console.WriteLine("Facebook users........n");
Console.ReadKey();
}
}
, , OOP
Code to interface not to implementation.
(
++ = ) OOP
Encapsulation ?
,
Iterator 22
class
return element;
}
}
Iterator 23
Iterator 24
Console.WriteLine("Facebook users........n");
ISocialNetworking iterator = new FacebookIterator();
while (iterator.HasNext())
{
Console.WriteLine(iterator.Next());
}
Console.WriteLine("n");
Twitter class
(ISocialNetworking)
Twitter class
Iterator 25
Facebook class
Iterator 26
iterator = facebook.GetIterator();
Console.WriteLine("Facebook users........n");
while (iterator.HasNext())
{
Console.WriteLine(iterator.Next());
}
Console.WriteLine("n");
iterator = twitter.GetIterator();
Console.WriteLine("Twitter users........n");
while (iterator.HasNext())
{
Console.WriteLine(iterator.Next());
}
Console.ReadKey();
}
}
Iterator
Iterator .NET
IEnumerator , Collection
Iterator 27
Iterator 28
iterator = facebook.GetIterator();
Console.WriteLine("Facebook users........n");
while (iterator.MoveNext())
{
Console.WriteLine(iterator.Current);
}
Console.WriteLine("n");
iterator = twitter.GetIterator();
Console.WriteLine("Twitter users........n");
while (iterator.MoveNext())
{
Console.WriteLine(iterator.Current);
}
Console.ReadKey();
}
}
Iterator
Collection :)
:)
Iterator 29
CodeReuse
Response enum
enum
/
Approve
Approve interface Approve
Response enum
Employee interface IApprover :
30
??
class class
Employee . Name Days. Employee class
ProjectManager class
31
ClientCode
if (Response.Approved != responses)
{
approver = new ProjectManager();
responses = approver.Approve(employee);
if (Response.Approved == responses)
{
Console.WriteLine("Request Granted Have A nice journey Mr:{0}", employee.Name);
}
else
{
Console.WriteLine("Sorry Your Request was not granted Mr:{0}", employee.Name);
}
}
else
{
Console.WriteLine("Request Granted Have A nice journey Mr:{0}", employee.Name);
}
}
}
32
ClientCode ??
ClientCode Employee
,
ClientCode
( if else) J
/ /
IAppover
(
) HandOver ,
Responsibility Chaining
IApprover
TeamLeader class
33
TeamLeader NextApprover
NextApprover.Approve(employee);
ProjectManager
ResourceManager class
return Response.Approved;
return NextApprover.Approve(employee);
}
public IApprover NextApprover { get; set; }
}
34
/
TeamLeader,ProjectManager,ResourceManager
RequestHandler class
/
RequestHandler class
RequestHandler
Redirect
RequestHandler
TeamLeader,ProjectManager,ResourceManager
35
RequestHandler
ClientCode
if (response == Response.Approved)
{
Console.WriteLine("Have A nice Journey Mr:{0}", employee.Name);
}
else if (response == Response.Denied)
{
Console.WriteLine("Sorry Mr:{0} We are busy now", employee.Name);
}
Console.ReadLine();
}
}
Chaining ??
Chaining Chain
return NextApprover.Approve(employee);
Response.Denied Chain Chain
Responsibility Chain Chain
Exception ( :) ) Null Exception :)
36
, :)
37
Subject
Observer . Observer
Subject . Subject
Observer Observer Subject
Subscribe
Subscribe
, ??
Subscriber
Subject GetNotification()
38
Moderator
Moderator Subscriber. Moderator ISubscriber
:
User ISubscriber
Blog Subscriber
39
ClientCode :
40
Blog NotifySubscribers()
Blog Subscriber
CMS
ClassLibrary
(DLL) DLL Obfuscated Code
Decompile/Reverse Engineering
DLL
SOLID OCP (Open Closed Principle)
OCP /
ClassLibrary
NotifySubscribers()
ClientCode
Blog
Subscriber
Subscribe() ISubscriber
NotifySubscribers()
Blog
Subscriber Blog class
Subscriber ISubscriber
class Subscriber ISubscriber
41
public Blog()
{
_subscribers = new List<ISubscriber>();
}
public String PostTitle
{
get
{
return _postTitle;
}
set
{
if (_postTitle != value)
{
_postTitle = value;
NotifySubscribers(_subscribers);
}
}
}
ClientCode
42
blog.Subscribe(new Moderator("Modu"));
blog.Subscribe(new User("Forhad"));
Console.ReadLine();
}
}
ClassLibrary Subscriber
class ISubscriber ClientCode Blog
Subscribe Subscriber
Blog Subscriber Subscriber
Blog Blog
UnSubscribe Subscribe ISubscriber
Subscriber
Unsubscribe
43
public Blog()
{
_subscribers = new List<ISubscriber>();
}
public String PostTitle
{
get
{
return _postTitle;
}
set
{
if (_postTitle != value)
{
_postTitle = value;
NotifySubscribers(_subscribers);
}
}
}
ClientCode
44
Blog class
IObservable:
45
ClientCode :)
DLL Interface ,
class , ClientCode
Subscriber Blog
46
Subject ( Blog)
( PostTitle) Push Observer
Pull Push Pull Java
.Net API Java .Net class
interface
:P
47
, BFC BFC
, BFC
, BFC
BFC
/ BFC
BFC
,
/ City class
48
public City()
{
StoreList = new List<Store>();
}
49
class Program
{
public static void Main(string[] args)
{
var store1 = new Store
{
Id = 1,
Name = "Malibagh BFC",
Profit = 2
};
var store2 = new Store
{
Id = 2,
Name = "Gulshan BFC",
Profit = 5
};
BFC
, BFC
City Class Division Class
City Add/Delete GetDivisionProfit() City
Division class
50
51
division.AddCity(city);
int totalProfit = division.GetDivisionProfit();
Console.WriteLine("Total Profit of {0} division is : {1}", division.Name, totalProfit);
Console.ReadLine();
}
}
,
, ,
( BFC KFC )
Class hierarchy
Division City Division
hierarchy
(City Division ,
- ) ,
52
Store class
53
}
public int GetProfit()
{
int totalProfit = 0;
return totalProfit;
}
}
public void RemoveChild(IProfitable profitable)
{
if (profitable is Store)
StoreList.Remove(profitable);
}
}
54
55
:)
56
57