Визуальные среды - нужна помощь по дополнению ответов! по мере изучения - пожалуйста дополняйте в комментариях.

Вопросы и ответы к ним по курсу Визуальных сред - чтобы сэкономить время при подготовке . не потеряв в качестве.


Вопросы:

  • 1. ООП и структурное программирование
  • 2. Объект, определение. Состояние, поведение, уникальность.
  • 3. Класс. Поля, свойства, методы.
  • 4. Инкапсуляция
  • 5. Области видимости
  • 6. Наследование. Суперклассы, подклассы, иерархия is a
  • 7. Полиморфизм. Виртуальные методы
  • 8. Абстрактные методы, абстрактные классы.
  • 9. Конструкторы
  • 10. Деструкторы, виртуальные деструкторы
  • 11. Преобразование типов
  • 12. Явное преобразование типов
  • 13. Неявное преобразование типов
  • 14. Множественное наследование
  • 15. Реализация множественного наследования в C#
  • 16. Статические члены класса, статические классы
  • 17. Singleton
  • 18. Множественный полиморфизм
  • 19. Агрегация, иерархия "является частью"
  • 20. Исключения, синтаксис, генерация, обработка
  • 21. Базовый класс исключений, конструкторы, реализация собственного класса исключений
  • 22. Передача данных через исключения
  • 23. Получение стека вызовов через исключения
  • 24. Делегаты, синтаксис
  • 25. Делегаты, применение, примеры
  • 26. События, синтаксис, примеры
  • 27. Составные делегаты
  • 28. Отражение. Класс Type
  • 29. Атрибуты, создание собственного класса атрибута
  • 30. Сборка. Загрузка сборки в память, получение списка классов

------------------------------
Теперь я постараюсь ответить на все эти вопросы по мере своих сил (буду рыться в интернете, собирать инфу- что-то прокомментирую сам ) - до зачёта остаётся три дня. а был я только на двух или трёх лекциях - но, наверное, это к лучшему - потому , что теперь и вам будет легче готовиться...то есть просто вам - мне в ближайшие три дня будет совсем не легко))
==============================================
1. ООП и структурное программирование.
Ответ:
ООП - объектно-ориентированное программирование - в основе принципов лежат понятия объекта и класса. ООП возникло в результате развития идеологии процедурного программирования.

==============================================
3. Класс. Поля, свойства, методы.
%Класс - это некий тип, описывающий свойста и особенности "поведения" объекта.
%Поле класса - это некая переменная связанная с классом или его реализацией - объектом . Все данные объекта хранятся в полях или свойствах . обычно тип данных полей задаётся при описании класса.
%Свойства класса - подобно полям хранят данные, но кроме этой функции для свойст возможна проверка данных, предлагаемых для запси в них на соответствие типу
свойств. Пример:
-------

// Свойство
public int MyintProp
{
  get // как возвращать значение
  {
  return myint;
  }
  set
  {
  myint = value; // как присваивать значение(как запоминать его в поле)
  }
}

---------
%Методы - это подпрограммы (процедуры и функции - могут как возвращать значение так ничего и не возвращать), которые манипулируют данными определёнными в классе. При описании метода могут использоваться следующие идентификаторы -
---------
Типы методов в Си шарп (C# , Си#) -
* virtual (виртуальный) — метод может быть переопределен.
• abstract (абстрактный) — метод должен быть переопределен (допускается только в абстрактных классах).
• override (переопределить) — метод переопределяет метод базового класса (это ключевое слово должно использоваться в том случае, если метод переопределяется).
• extern (внешний) — определение метода находится где-либо в другом месте.
* sealed (типа -"герметичный") - показывает, что данный метод не может быть переопределён в произвольных классах.
* public (общедоступный в хорошем смысле слова) - такой метод может быть достапен из любого участка кода.
---------
Пример:

 public class MyDerivedCiass : MyBaseClass
{ 
public override void DoSomethin()
{
// Реализация метода в производном классе,
// которая переопределяет базовую реализацию.
}
}

====================================================
4. Инкапсуляция

Принцип ООП, в соответствии с которым любой класс может должен рассматривать как чёрный ящик, при этом оставляя "видимым" для пользователя только свою интерфейсную часть.
Здесь следует упоминуть про понятие "СОКРЫТИЕ ДАННЫХ" -также являющуюся одновременно как неотемлимой частью ООП, так и логическим продолжением инкапсуляции. Фактически - это управление областью видимости переменной.
======================================================
5. Области видимости

Понятие области видимости используется в некоторых языках программирования. Область видимости переменной (объекта) - определяет те участки в исходном коде программы ,где можно использовать данную переменнную (объект).
Область видидимости бывает локальной или глобальной - ещё в википедии.

=====================================================

6. №Наследование. Суперклассы, подклассы, иерархия is a
-----------
Наследование - является одним из трёх фундаментальных принципов объектно-ориентированного программирования. С помощью наследования для группы классов использающих частично схожий функционал можно создать общий родительский класс, от которого первые могут унаследовать общие поля/свойста/методы , при этом в каждый из наследующих классов можно добавить свои уникальные особенности.
-------------------------------------
Суперклассы (иногда - родительский класс)- это класс, от которого наследуются другие классы, называемые дочерними классами или ПОДКЛАССАМИ. Здесь следует выделить понятие БАЗОВОГО КЛАССА - такого класса, который не имеет родительского и находится в основании иерархии наследования. Суперкласс позволяет настраивать наследуемые функции(методы), в случае объявления их как виртуальных.
-------------------------------------
Иерархия - это набор классов , связанных отношением наследования. Википедия считает, что наследование "призвано отобразить такое свойство реального мира, как иерархичность" .
------------------------------------
Оператор "is" - определяет соответствие объекта описанному классу. пример -
__________

Class1 a;
 Class2 b;

 if (o is Class1) 
   {
     Console.WriteLine ("o is Class1");
     a = (Class1)o;
   // do something with a
   }

___

===============================================
7. Полиморфизм. Виртуальные методы

Полиморфизм - явление , при котором функции(методы) с одним и тем же именем ("поли" - "единичный") соответствуют различные кодовые реализации. Это явление
возникает в случае, если в классе-потомке переопределяется реализация метода с сохранением его сигнатуры функции - то есть особенностей её объявления.

Виртуальные методы - это методы, которые могут быть переопределены в дочерних (наследующих) классах.
===============================================

8. Абстрактные методы, абстрактные классы.

Абстрактные методы могут быть членами только абстрактных классов. Экземпляр абстрактного класса не может быть создан, но такой класс может наследоваться.
Абстрактные методы не имеют реализации, их реализация должна быть описана в производном (наследующем) классе.
Абстрактные классы могут оказаються полезными , например , в том случае, если класс, от которого предполагается производить наследование имеет слишком уж общие характеристики (например - "живой организм") - и не соответствует какой-либо реальной сущности.
=================================
9. Конструкторы - это специальный блок инструкций, вызываемый при создании объекта. Конструктор - это в, общем смысле, метод имя которого совпадает с именем класса ,в рамках которого этот метод описан (последнее верно для си шарпа)
Пример:

class myClass
{
  private int mA;
  private string mB;
  public myClass(int a, string b)
  {
    mA = a;
    mB = b;
  }
}

===============================================
10. Деструкторы, виртуальные деструкторы

Деструктор - специальный метод класса, служащий для деинициализации объекта (например освобождения памяти).
Пример -
__________________

   ~имя_класса() {
// код деструктора
}

__________________

Виртуальный деструктор - десктруктор имеет смысл сделать виртуальным, чтобы корректно (без утечек памяти) уничтожались объекты не только заданного класса, а и любого производного от него.

===============================================
11. Преобразование типов
Преобразование типов - это изменение типа данных при присваивании значения переменной.
===============================================
12. Явное преобразование типов

Явное преобразование типов - это преобразование при котором присутствует идентификатор типа, в который данные преобразуются.
Например так -
___________

int i;
i = (int) (x / y) ; // Дробная часть теряется.

___________
===============================================

13. Неявное преобразование типов
(автоматическое преобразование.)
Осуществляется при двух условиях -
1) типы являются совместимыми.
2) тип приёмника имеет больший диапазон представления чисел, чем тип источника.
Если эти два условия выполняются, то в си# шарпе можно проворачивать действия подобные следующей -
__________

long  L;
double D;
L = 1001232851;
D = L;

__________
===============================================
14. Множественное наследование
Множественное наследование - позволяет классу наследовать функциональность (поля свойств методы) - у нескольких других классов (число наследуемых классов может быть ограничено, а может и не быть таковым)))
Пример:
---------
public class MobilePhone : MobilePhone, Camera , Radio, Mp3Player // этот пример - из жизни свойства всех щняг после двоеточия наследуются мобильником (по представлению многих)))
--------
==============================================
15. Реализация множественного наследования в C#

В в Си шарпе нельзя наследоваться сразу от нескольких классов, но можно наследоваться от одного класса и/или нескольких итерфейсов.
Причины в нете указывают такие -
продуктивности. Множественное наследование сильно мешает достижению этих
целей.>>
Также цитата от мелкомягких -

>

==============================================
16. Статические члены класса, статические классы.
Статические класс - это класс экземпляр которого не может быть создан, например - Console. Все его члены - статические.
Статические члены класса - это члены, к которым можно обращаться не создавая экземпляра данного класса, например -
Console.WriteLine();

=============================================
18. Множественный полиморфизм

В рамках ООП возможна реализация эволюционного множественного полиморфизма.....
=============================================
19. Агрегация, иерархия "является частью"

Агрегация - фактически это "вкладывание" класса в класс.
Пример -
________

class A
    {
        protected  String myString = "A";
        private B b;
        public A()
        {
            b = new B(this);
        }
        class B
        {
            private A myA;
            internal B(A a)
            {
                myA = a;
            }
            void myMethod()
            {
                myA.myString = "B";
            }
        }
    }

________
================================================
20. Исключения, синтаксис, генерация, обработка

В си шарпе исключения представлены в виде классов из пространства System.Exception.throw - необходимо, чтобы сгенерировать исключение вручную.
Пример перехвата исключения -
_______________

static void Main()
    {
        try // описывается фрагмент кода, в котором могу возникнуть ошибки
        {
            string s = null;
            ProcessString(s);
        }
        catch (Exception e) //  указывается какая именно ошибка ождается (возможно любая - тогда никакой конкретно) - далее описывается  что в этом случае надо сделать.
        {
            Console.WriteLine("{0} Exception caught.", e);
        }
    }

Чтобы сгенерировать исключение вручную - описываем перемённую "исключенческого" типа -
throw exceptOb;
и вот например такой код (в этом примере вручную искусственно генерируется исключение, которое обычно автоматически генирируется системой при делении на ноль.)

class ThrowDemo {
public static void Main() {
try {
Console.WriteLine("До генерирования исключения.");
throw new DivideByZeroException();
}
catch (DivideByZeroException) {
// Перехватываем исключение.
Console.WriteLine("Исключение перехвачено.");
}
Console.WriteLine("После try/catch-блока.");
}

_______________

================================================
21. Базовый класс исключений, конструкторы, реализация собственного класса исключений
Базовый класс исключений - это System.Exception.

Существует четыре типа стандартных конструкторов для исклоючений :
наиболее часто используются:
Exception()
Exception(string str)
и ещё два -
RangeArrayException(string message, Exception innerException)
для сериализации исключений-
RangeArrayException(System.Runtime.Serialization.SerializationInfo info,
System.Runtime.Serialization.StreamingContext context)

Для реализации собственного класса исключений достаточно "занаследоваться" от родоночальника класса исключений для прикладных программ
ApplicationException;
это делается как-то так:

Цитирую msdn (это самый мощный ресур по си шарпу - советую его почитывать )-
Программисты должны генерировать исключения при выполнении одного или нескольких из следующих условий:
* Метод не способен выполнить свои определенные функции.
_________________

static void CopyObject(SampleClass original)
{
    if (original == null)
    {
        throw new System.ArgumentException("Parameter cannot be null", "original");
    }
}

_______________
* На основе состояния объекта выполнен неправильный вызов объекта. (например произведена попытка записи в файл доступный только для чтения)
___________

class ProgramLog
{
    System.IO.FileStream logFile = null;
    void OpenLog(System.IO.FileInfo fileName, System.IO.FileMode mode) {}

    void WriteLog()
    {
        if (!this.logFile.CanWrite)
        {
            throw new System.InvalidOperationException("Logfile cannot be read-only");
        }
        // Else write data to the log and return.
    }
}

_____

* Когда исключение вызывает аргумент метода.
В этом случае, должно быть перехвачено исходное исключение и создан экземпляр ArgumentException. Исходное исключение должно быть передано конструктору ArgumentException в качестве параметра InnerException:
___________

static int GetValueFromArray(int[] array, int index)
{
    try
    {
        return array[index];
    }
    catch (System.IndexOutOfRangeException ex)
    {
        System.ArgumentException argEx = new System.ArgumentException("Index is out of range", "index", ex);
        throw argEx;
    }
}

___________

================================================
22. Передача данных через исключения

================================================
24. Делегаты, синтаксис.

Делегат - это объект , который может ссылаться на метод. Делегат может вызывать метод на который ссылается. Делегат определяется следующим образом -
delegate тип_возврата имя_делегата{список_параметров);
Получить ссылку на метод можно следующим образом -
имя_делегата переменная_типа_делегат = new имя_делегата(имя_метода) ;

Метод должен по типу получаемых и передаваемых значений полностью соответствовать делегату. Метод передаётся делегату в качестве параметра. (таким образом делегат получает ссылку на область памяти в которой рамполагается метод.)

=============================================
25. Делегаты, применение, примеры

Одна из самых интресных возможностей делегата - это формироваие списка вызовов.
Для этого необходимо создать экземпляр делегата, а затем, для добавления метода в цепочку вызовов использовать "+=".

Применение : 1) делегаты необходимы для обеспечения работы событий. 2) делегаты позволяют в процессе работы программы выполнять методы, не известные до компиляции - в том смысле- что не известно, какой именно метод будет применён. Вторая возможность полезна, если к программе предполагается подключать некие дополнительные компоненты.

Пример -
-------------

delegate string strMod(string stx);
Class1{
static string replaceSpaces(string a) {
Console.WriteLine("Замена пробелов дефисами.");
return a.Replace(' ', '-') ;
} }
Main() {
strMod strOp = new strMod(replaceSpaces);
}

-------------

===============================================
26. События, синтаксис, примеры
Событие - это автоматическое уведомление о выполнении какого-либо действия.
События подобно методам являются членами класса и объявляются с использованием ключевого слова "event" следующим образом:
event событийный_делегат объект;

Простой пример из книги Шилдта -
----------

// Демонстрация использования простейшего события.
using System;
// Объявляем делегат для события,
delegate void MyEventHandler();
// Объявляем класс события,
class MyEvent {
public event MyEventHandler SomeEvent;  // Этот метод вызывается для генерирования события,
public void OnSomeEvent() {
if(SomeEvent != null)
SomeEvent();
class EventDemo {
// Обработчик события,
static void handler() {
Console.WriteLine("Произошло событие.");
public static void Main() {
MyEvent evt = new MyEvent();
// Добавляем метод handler() в список события,
evt.SomeEvent += new MyEventHandler(handler);
// Генерируем событие,
evt.OnSomeEvent();
}
}

------------------------

===============================================
27. Составные делегаты.

Составные делегаты - это делегаты, составленные из нескольких других делегатов. Такая возмосможность может пригодится если в ряде повторяющихся операций приходится модифицировать действие функции , обрабатывающей ряд значений в соответствии с особенностями обрабатываемого значения.
фактически ,создаётся список вызовов - см. вопрос 25.
==============================================
28. Отражение. Класс Type

Отражение API явялет собой класс пространства имён System.Reflection. Эти классы позволяют получать информацию о сборке и о типе.
Класс Type - центральный класс отражения . полное имя -System.Type - является абстрактным.

Отражение - это средство C#, котое позволяет получить информацию о типе. Объект класса TYPE возвращает "отражает информацию о типе".

==============================================

29. Атрибуты, создание собственного класса атрибута

Атрибут предназначен для описания элементов в си-шарп-программе. Информацию о них можно как запрашивать, так и получать во время выполнения программы. Атрибут в можно поместить дополнительные сведения о классе, конструкторе , методе.
Атрибут поддерживается классом, производным от класса System. Attribute .
Пример описания -

 [AttributeUsage(AttributeTargets.All)] // AttributeUsage - значит, что данный атрибут применим ко всем типам.
public class RemarkAttribute : Attribute {
string pri_remark; // Базовое поле для свойства remark.
public RemarkAttribute(string comment) {
pri_remark = comment;
}
public string remark {
get {9*-
return pri_remark;
}
}
}

Comments

отформатируем позже.

_________ _ _ ______
dthcbz фкн вгу and co

vedro-compota's picture

ха! два года спустя поправил за тебя)) тогда ещё и фильтров не было - а сейчас прям подсветка для си шарп - шик)

_____________
матфак вгу и остальная классика =)

Wishmaster's picture

Как-то нифига я не понимаю зачем такой вот копипаст. Есть книжки, которые полнее, умнее и полезнее. Этот контент нисколько не оригинален. Ребят, ну зачем вы так? Вам не кажется глупым копипаст книжек, причем я подозреваю что это копипаст шпор или наоборот из этого скорее сделают шпоры и спишут.

Ладно пойду спать неладная меня сюда занесла.

mechanism

vedro-compota's picture

ну да....это не совсем кул.
но такие ответы должен был скопипастить преподаватель - а потом уже спрашивать.
но он как-то их не скопипастил ,видимо....

_____________
матфак вгу и остальная классика =)

Wishmaster's picture

зачем их копипастить. Книжки читать надо.

mechanism

vedro-compota's picture

ага, но сначала книжки надо писать))) опять же - преподавателям.

_____________
матфак вгу и остальная классика =)