Ответы к экзамену 0.4
Описание файла
PDF-файл из архива "Ответы к экзамену 0.4", который расположен в категории "". Всё это находится в предмете "распределённые ис и базы данных" из 9 семестр (1 семестр магистратуры), которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "к экзамену/зачёту", в предмете "распределённые ис и базы данных" в общих файлах.
Просмотр PDF-файла онлайн
Текст из PDF
НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ «МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ»ИНСТИТУТ АВТОМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИКАФЕДРА ПРИКЛАДНОЙ МАТЕМАТИКИОтветы к экзаменуver. 0.4Проектирование крупных распределённыхпрограммных систем и баз данных9 семестрЛектор курса: к.т.н., доц. Куриленко Иван ЕвгеньевичМосква, 2013〈 ,,{( , )〉,,}системе су ествует св зь от к( , )n〈 , , 〉⏟,{ }{ }{ }{ }{ }{ }〈 , , 〉〈 , , 〉〈 , , ,{ }{ }{ }, 〉{ }{ }〈 , , , 〉{ }{ }{ }{ }〈 , , , , 〉{ }{ }{ }{ }〈 ,{,},〉{ }{{ }}Шаблон делегирования – это способ, которым объект внешне выражаетнекоторое поведение, но в реальности передаёт ответственность за выполнениеэтого поведения связанному объекту.Шаблон даёт возможность изменить поведение конкретного экземпляра объектавместо создания нового класса путем наследования.
Таким образом, если приработе с объектом велика вероятность возникновения такой ситуации, следуетиспользовать шаблон делегирования.Шаблон реализуется следующим образом:using System;using System.Text;interface IDelegate{double sum(double a, double b);}class GoodStudent : IDelegate{public double sum(double a, double b) { return a + b; }}class BadStudent : IDelegate{public double sum(double a, double b){Random rand = new Random();return rand.Next(5, 10);}}class Delegate : IDelegate{IDelegate student = new GoodStudent();public double sum(double a, double b){return student.sum(a, b);}public void setStudent(IDelegate s){student = s;}}class Program{static void Main(string[] args){Delegate teacher = new Delegate();Console.WriteLine("Хороший студент: 2 + 2 = " + teacher.sum(2, 2));teacher.setStudent(new BadStudent());Console.WriteLine("Плохой студент: 2 + 2 = " + teacher.sum(2, 2));Console.ReadLine();}}using System;using System.Text;public interface IImmutable{bool isImmutable { get; }void makeImmutable();}public abstract class Immutable : IImmutable{private bool immutable;public bool isImmutable{get{return immutable;}}public virtual void makeImmutable(){immutable = true;}protected virtual void checkImmutable(){if (immutable) throw new Exception("[Error] Нельзя менять свойства неизменяемых объектов");}}public class Planet : Immutable{private string name;private double mass;private double g;public string Name{get { return name; }set { checkImmutable(); name = value; }}public double M{get { return mass; }set { checkImmutable(); mass = value; }}public double G{get { return g; }set { checkImmutable(); g = value; }}public Planet(string name, double M, double g){this.name = name;this.mass = M;this.g = g;makeImmutable();}}#include <stdio.h>#include <tchar.h>#define interface structinterface IObject{public:virtual void Draw() = 0;};class Triangle : IObject{public:Triangle(){};void Draw(){printf("рисуется треугольник");};};class Plane : IObject{public:Plane(){};void Draw(){printf("рисуется плоскость");};};int _tmain(int argc, _TCHAR* argv[]){Plane *plane = new Plane();plane->Draw();getchar();return 0;}interface IMathExceptionMarker { }abstract class MyException{public string Message;}class DivException : MyException, IMathExceptionMarker{public DivException() { Message = "Деление на ноль!"; }}class OverflowException : MyException{public OverflowException() { Message = "Переполнение стека"; }}class LgException : MyException, IMathExceptionMarker{public LgException(){Message = "lg(x), x > 0!!";}}class Program{static void Main(string[] args){List<MyException> exceptions = new List<MyException>();exceptions.Add(new DivException());exceptions.Add(new OverflowException());exceptions.Add(new LgException());foreach (MyException e in exceptions){if(!(e is IMathExceptionMarker))Console.WriteLine(e.Message);}Console.ReadLine();}}using System;using System.Collections.Generic;using System.Text;namespace Patterns{public interface IPropertyContainer{void SetProperty(string name, object value);void RemoveProperty(string name);object GetProperty(string name);List<String> GetAllPropertiesNames();}public abstract class PropertyContainer:IPropertyContainer{protected Dictionary<string, object> Properties;public PropertyContainer() {Properties = new Dictionary<string, object>();}public PropertyContainer(Dictionary<string, object> prop) {this.Properties = prop;}public void SetProperty(string key, object value) {try {Properties[key] = value;}catch(KeyNotFoundException){Properties.Add(key,value);}}public object GetProperty(string name) {try {return Properties[name];}catch(KeyNotFoundException) {return null;}}public void RemoveProperty(string name) {try{Properties.Remove(name);}catch (KeyNotFoundException){}}public List<string> GetAllPropertiesNames() {return Properties.Keys.ToList();}public override string ToString(){string result= "";foreach (KeyValuePair<string,object> kvp in this.Properties) {result += kvp.Key + ": "+kvp.Value.ToString()+Environment.NewLine;}return result;}}public enum PASTRY_TYPE {THIN, THICK, MIDDLE}public class PizzaContainer:PropertyContainer{public string Cheese{get { return (string)GetProperty("cheese"); }set{SetProperty("cheese", value);}}public PASTRY_TYPE PastryType{get { return (PASTRY_TYPE)GetProperty("pastrytype"); }set { SetProperty("pastrytype", value); }}public override string ToString(){string result = "Pizza Info:" + Environment.NewLine;result+=base.ToString();return result;}}class Program{static void Main(string[] args){PizzaContainer pizza = new PizzaContainer();pizza.Cheese = "Mozarella";pizza.PastryType = PASTRY_TYPE.THICK;pizza.SetProperty("tomato",true);Console.WriteLine(pizza.ToString());Console.ReadLine();}}}using System;using System.Text;abstract class Factory{public abstract AbstractProductA CreateProductA();public abstract AbstractProductB CreateProductB();}class ConcreteFactory1 : Factory{public override AbstractProductA CreateProductA(){return new ProductA1();}public override AbstractProductB CreateProductB(){return new ProductB1();}}class ConcreteFactory2 : Factory{public override AbstractProductA CreateProductA(){return new ProductA2();}public override AbstractProductB CreateProductB(){return new ProductB2();}}abstract class AbstractProductA { }class ProductA1 : AbstractProductA { }class ProductA2 : AbstractProductA { }abstract class AbstractProductB{public abstract void Interact(AbstractProductA a);}class ProductB1 : AbstractProductB{public override void Interact(AbstractProductA a){Console.WriteLine(this.GetType().Name + " взаимодействует с " + a.GetType().Name);}}class ProductB2 : AbstractProductB{public override void Interact(AbstractProductA a){Console.WriteLine(this.GetType().Name + " взаимодействует с " + a.GetType().Name);}}class Client{private AbstractProductA abstractProductA;private AbstractProductB abstractProductB;public Client(Factory factory){abstractProductB = factory.CreateProductB();abstractProductA = factory.CreateProductA();}public void Run(){abstractProductB.Interact(abstractProductA);}}class Program{static void Main(string[] args){Factory factory1 = new ConcreteFactory1();Client c1 = new Client(factory1);c1.Run();Factory factory2 = new ConcreteFactory2();Client c2 = new Client(factory2);c2.Run();Console.Read();}}using System;using System.Collections.Generic;using System.Text;public interface Mutator{void SetLegs();void SetTail();void SetSwim();void SetRoar();Pet GetPet();}public class Pet{public int legs;public bool tail;public bool is_swimming;public string roar;public void Roar(){Console.WriteLine(this.roar);}}class Cat : Mutator{private readonly Pet Animal = new Pet();public Pet GetPet(){return Animal;}public void SetLegs(){Animal.legs = 4;}public void SetTail(){Animal.tail = true;}public void SetSwim(){Animal.is_swimming = true;}public void SetRoar(){Animal.roar = "Meow!!!";}}class Dog : Mutator{private readonly Pet Animal = new Pet();public Pet GetPet() { return Animal; }public void SetLegs(){Animal.legs = 4;}public void SetTail(){Animal.tail = true;}public void SetSwim(){Animal.is_swimming = true;}public void SetRoar(){Animal.roar = "Bark!!!";}}class Parrot : Mutator{private readonly Pet Animal = new Pet();public Pet GetPet(){return Animal;}public void SetLegs(){Animal.legs = 2;}public void SetTail(){Animal.tail = true;}public void SetSwim(){Animal.is_swimming = false;}public void SetRoar(){Animal.roar = "Chik-chirik!!!";}}class AnimalOwner{Mutator mutator;public AnimalOwner(Mutator mut){this.mutator = mut;}public Pet Mutate(){mutator.SetLegs();mutator.SetTail();mutator.SetSwim();mutator.SetRoar();return mutator.GetPet();}}class Program{static void Main(string[] args){Cat cat = new Cat();AnimalOwner ao = new AnimalOwner(cat);Pet pet = ao.Mutate();pet.Roar();Console.ReadLine();}}usingusingusingusingusingusingusingSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;public partial class SimpleForm : Form{public SimpleForm(){InitializeComponent();RedButtonCreator redBtnCreator = new RedButtonCreator();this.button1 = redBtnCreator.FactoryMethod();GreenButtonCreator greenBtnCreator = new GreenButtonCreator();this.button2 = greenBtnCreator.FactoryMethod();BlueButtonCreator blueBtnCreator = new BlueButtonCreator();this.button3 = blueBtnCreator.FactoryMethod();this.Controls.Add(this.button1);this.Controls.Add(this.button2);this.Controls.Add(this.button3);}}class RedButton : Button{public RedButton() : base(){this.BackColor = System.Drawing.Color.OrangeRed;this.ForeColor = System.Drawing.SystemColors.ButtonHighlight;this.Location = new System.Drawing.Point(100, 50);this.Size = new System.Drawing.Size(200, 50);this.Text = "Red button";this.UseVisualStyleBackColor = false;}}class GreenButton : Button{public GreenButton() : base(){this.BackColor = System.Drawing.Color.YellowGreen;this.ForeColor = System.Drawing.SystemColors.ButtonHighlight;this.Location = new System.Drawing.Point(100, 120);this.Size = new System.Drawing.Size(200, 50);this.Text = "Green button";this.UseVisualStyleBackColor = false;}}class BlueButton : Button{public BlueButton() : base(){this.BackColor = System.Drawing.Color.DodgerBlue;this.ForeColor = System.Drawing.SystemColors.ButtonHighlight;this.Location = new System.Drawing.Point(100, 190);this.Size = new System.Drawing.Size(200, 50);this.Text = "Blue button";this.UseVisualStyleBackColor = false;}}abstract class Creator{public abstract ButtonBase FactoryMethod();}class RedButtonCreator : Creator {public override ButtonBase FactoryMethod() {return new RedButton();}}class GreenButtonCreator : Creator {public override ButtonBase FactoryMethod() {return new GreenButton();}}class BlueButtonCreator : Creator {public override ButtonBase FactoryMethod() {return new BlueButton();}}using System;using System.Text;public class LazyInitializator<T> where T : new(){protected LazyInitializator(){}private static T _instance;public static T Instance{get{if (_instance == null){lock (typeof(T)){if (_instance == null)_instance = new T();}}return _instance;}}}public sealed class BigObject : LazyInitializator<BigObject>{public BigObject(){System.Threading.Thread.Sleep(3000);System.Console.WriteLine("Экземпляр BigObject создан");}}namespace ConsoleApplication1вафываы{class Program{static void Main(string[] args){Console.WriteLine("Первое обращение к экземпляру BigObject...");Console.WriteLine(BigObject.Instance);Console.WriteLine("Второе обращение к экземпляру BigObject...");Console.WriteLine(BigObject.Instance);Console.Read();}}Объектныйпул–порождающийшаблонпроектирования,наборинициализированных и готовых к использованию объектов.
Когда системетребуется объект, он не создаётся, а берётся из пула. Когда объект больше не нужен,он не уничтожается, а возвращается в пул.usingusingusingusingSystem;System.Text;System.Threading;System.Collections;public interface ICreation<T>{T Create();}public class ObjectPool<T> where T : class{/// Объект синхронизацииprivate Semaphore semaphore;/// Коллекция содержит управляемые объектыprivate ArrayList pool;/// Ссылка на объект, которому делегируется ответственность за создание объектов пулаprivate ICreation<T> creator;/// Количество объектов, существующих в данный моментprivate Int32 instanceCount;/// Максимальное количество управляемых пулом объектовprivate Int32 maxInstances;public ObjectPool(ICreation<T> creator) : this(creator, Int32.MaxValue) { }public ObjectPool(ICreation<T> creator, Int32 maxInstances){this.creator = creator;this.instanceCount = 0;this.maxInstances = maxInstances;this.pool = new ArrayList();this.semaphore = new Semaphore(0, this.maxInstances);}/// Возвращает количество объектов в пуле, ожидающих повторного/// использования.