Uploaded by Eva Eva

03 Класс object

advertisement
классы .NET
класс object
Язык программирования C#
Парадигмы программирования
Парадигма — способ организации программы, принцип ее построения.
Наиболее распространенными являются процедурная и объектноориентированная парадигмы.
Они различаются способом декомпозиции, положенным в основу при
создании программы.
Процедурная декомпозиция состоит в том, что задача,
реализуемая программой, делится на подзадачи, а они, в
свою очередь — на более мелкие этапы, то есть выполняется
пошаговая детализация алгоритма решения задачи.
Объектно-ориентированная декомпозиция предполагает
разбиение предметной области на объекты и реализацию
этих объектов и их взаимосвязей в виде программы.
Кроме того, существуют функциональная и логическая
парадигмы.
Первый взгляд на классы
• Понятие класс аналогично обыденному смыслу этого слова в контексте
«класс членистоногих», «класс задач».
• Класс является обобщенным понятием, определяющим характеристики
и поведение некоторого множества конкретных объектов этого класса,
называемых экземплярами класса (объектами).
Класс
содержит данные, задающие свойства объектов
класса, и функции (методы), определяющие их поведение.
Все
классы .NET имеют одного общего предка — класс
object, и организованы в единую иерархическую структуру.
Классы
логически сгруппированы в так называемые
пространства имен, которые служат для упорядочивания
имен классов и предотвращения их конфликтов: в разных
пространствах имена могут совпадать. Пространства имен
могут быть вложенными
Трансляция
Компиляция
Исходный
текст
программы
Оператор на
исходном
языке
Интерпретация
Компилятор,
компоновщик
Программа на
машинном
языке
Интерпретатор
Команды на
машинном
языке
Выполнение
программы
Выполнение
команд
Гибридная схема трансляции
Исходный
текст
программы
Компилятор
Программа на
промежуточном
языке
Исполняющая
система
Схема выполнения программы в .NET
Исходный
текст
программы
Базовые классы
среды (IL и
метаданные)
Сборка (.exe или .DLL)
Компилятор
CLR
Исполняемый файл (IL и
метаданные)
Загрузчик классов
JIT-компилятор
Исполняемый код
(маш. команды)
Выполнение
программы
Вызовы
нескомпилированных
методов
Хранение в памяти величин значимого и
ссылочного типа
Хип
Значение
Значение
Стек
Значение
Значение
x
y
Ссылка
а
Ссылка
b
Ссылочный
Тип-значение
тип
Ссылка
c
Платформа Microsoft .Net Framework
• Совокупность средств, с помощью которых программы пишутся,
корректируются, преобразуются в машинные коды,
отлаживаются и запускаются, называют средой разработки или
оболочкой.
• Платформа .Net или .Net Framework – это больше чем просто
среда разработки программ, это новое революционное
объединение ранее разрозненных технологий компанией
Microsoft, которые позволяют разрабатывать разнотипные
приложения на различных языках программирования под
различные операционные системы.
8
.NET Framework
• является надстройкой над операционной системой, в
качестве которой может выступать любая версия
Windows, Unix и вообще любая ОС (по заверению
разработчиков), и состоит из ряда компонентов. Так, .NET
Framework включает в себя:
• Четыре официальных языка: С#, VB.NET, Managed C++ и JScript
.NET.
• Общеязыковую объектно-ориентированную среду выполнения
CLR (Common Language Runtime), совместно используемую этими
языками для создания приложений.
• Ряд связанных между собой библиотек классов под общим
именем FCL (Framework Class Library).
9
Основным компонентом платформы .NET
Framework
• является общеязыковая среда выполнения программ CLR.
• Название среды – «общеязыковая среда выполнения» - говорит само за
себя: это исполняющая среда, которая подходит для различных языков
программирования. К функциям CLR относятся:
• двухшаговая компиляция: преобразование программы, написанной на одном
из языков программирования в управляемый код на промежуточном языке
(Microsoft Intermediate Language, MSIL, или просто IL), а затем преобразование
IL-кода в машинный код конкретного процессора, который выполняется с
помощью виртуальной машины или JIT-компилятора (Just In Time compiler компилирование точно к нужному моменту);
• управление кодом: загрузка и выполнение уже готового IL-кода с помощью JITкомпилятора;
• осуществление доступа к метаданным с целью проверки безопасности кода;
• управление памятью при размещении объектов с помощью сборщика мусора
(Garbage Collector);
• обработка исключений и исключительных ситуаций, включая межъязыковые
исключения;
• осуществление взаимодействия между управляемым кодом (код, созданный
для СLR) и неуправляемым кодом;
• поддержка сервисов для разработки разнотипных приложений.
10
Следующим компонентом .Net Framework
является FCL
• – библиотека классов платформы. Эта библиотека разбита на несколько
модулей таким образом, что имеется возможность использовать ту или
иную ее часть в зависимости от требуемых результатов. Так, например, в
одном из модулей содержатся "кирпичики", из которых можно построить
Windows-приложения, в другом — "кирпичики", необходимые для
организации работы в сети и т.д.
• Часть FCL посвящена описанию базисных типов. Тип — это способ
представления данных; определение наиболее фундаментальных из них
облегчает совместное использование языков программирования с
помощью .NET Framework. Все вместе это называется Common Type System
(CTS — единая система типов).
• Кроме того, библиотека FCL включает в себя Common Language
Specification (CLS – общая языковая спецификация), которая устанавливает:
основные правила языковой интеграции. Спецификация CLS определяет
минимальные требования, предъявляемые к языку платформы .NET.
Компиляторы, удовлетворяющие этой спецификации, создают объекты,
способные взаимодействовать друг с другом. Поэтому любой язык,
соответствующий требованиям CLS, может использовать все возможности
библиотеки FCL.
11
Основными языками,
• предназначенными для платформы .NET Framework, являются С#,
VB.NET, Managed C++ и JScript .NET. Для данных языков Microsoft
предлагает собственные компиляторы, переводящие программу
в IL-код, который выполняется JIT-компилятором среды CLR.
• Кроме Microsoft, еще несколько компаний и академических
организаций создали свои собственные компиляторы,
генерирующие код, работающий в CLR.
• На сегодняшний момент известны компиляторы для Pascal,
Cobol, Lisp, Perl, Prolog и т.д. Это означает, что можно написать
программу, например, на языке Pascal, а затем,
воспользовавшись соответствующим компилятором, создать
управляемый код, который будет работать в среде CLR.
12
Понятия приложения, проекта, решения
• .NET Framework не налагает никаких ограничений на возможные типы
создаваемых приложений. Тем не менее, давайте рассмотрим некоторые
наиболее часто встречающиеся типы приложений:
• Консольные приложения позволяют выполнять вывод на «консоль», то есть в
окно командного процессора.
• Windows-приложения, использующие элементы интерфейса Windows, включая
формы, кнопки, флажки и т.д.
• Web-приложения представляют собой web-страницы, которые могут
просматриваться любым web-браузером.
• Web-сервисы представляют собой распределенные приложения, которые
позволяют обмениваться по Интернету практически любыми данными с
использованием единого синтаксиса независимо от того, какой язык
программирования применялся при создании web-службы и на какой системы
она размещена.
• Приложение, находящееся в процессе разработки, называется проектом.
Несколько приложений могут быть объединены в решение (solution).
• Удобной средой разработки приложений является Visual Studio .Net.
13
Поля и методы встроенных типов
• Любой встроенный тип C# построен на основе стандартного класса
библиотеки .NET. Это значит, что у встроенных типов данных C# есть
методы и поля. С помощью них можно, например, получить:
• double.MaxValue (или System.Double.MaxValue) — максимальное число
типа double;
• uint.MinValue (или System.UInt32.MinValue) — минимальное число типа
uint.
• В вещественных классах есть элементы:
• положительная бесконечность PositiveInfinity;
• отрицательная бесконечность NegativeInfinity;
• «не является числом»: NaN.
Приоритеты операций C#
1.
Первичные
2.
Унарные
3.
Типа умножения (мультипликативные) *, /, %
4.
Типа сложения (аддитивные)
5.
Сдвига
<<, >>
6.
Отношения и проверки типа
<, >, is, …
7.
Проверки на равенство
8.
Поразрядные логические
&, ^, |
9.
Условные логические
&&, ||
10. Условная
11. Присваивания
(), [], ++, --, new, …
~, !, ++, --, -, …
+, -
==, !=
?:
=, *=, /=,…
Введение в исключения
• При вычислении выражений могут возникнуть ошибки
(переполнение, деление на ноль).
• В C# есть механизм обработки исключительных ситуаций
(исключений), который позволяет избегать аварийного завершения
программы.
• Если в процессе вычислений возникла ошибка, система
сигнализирует об этом с помощью выбрасывания (генерирования)
исключения.
• Каждому типу ошибки соответствует свое исключение. Исключения
являются классами, которые имеют общего предка — класс
Exception, определенный в пространстве имен System.
• Например, при делении на ноль будет выброшено исключение
DivideByZeroException, при переполнении — исключение
OverflowException.
Рекомендуемая структура обработки ошибок
исходных данных
ввод данных
ошибка 1?
ошибка 2?
да
да
сообщение 1
выход
сообщение 2
выход
...
основной поток
вычислений
НЕ в толще
вложенных
блоков!
17
Понятие «исключительная ситуация»
• При вычислении выражений могут возникнуть ошибки (переполнение,
деление на ноль).
• В C# есть механизм обработки исключительных ситуаций (исключений),
который позволяет избегать аварийного завершения программы.
• Если в процессе вычислений возникла ошибка, система сигнализирует об
этом с помощью выбрасывания (генерирования) исключения.
• Каждому типу ошибки соответствует свое исключение. Исключения
являются классами, которые имеют общего предка — класс Exception,
определенный в пространстве имен System.
• Например, при делении на ноль будет выброшено исключение
DivideByZeroException, при переполнении — исключение
OverflowException.
• В программе необходимо предусмотреть обработку исключений.
18
Механизм обработки исключений
• Функция или операция, в которой возникла ошибка,
генерируют исключение;
• Выполнение текущего блока прекращается, отыскивается
соответствующий обработчик исключения, ему передается
управление.
• В любом случае (была ошибка или нет) выполняется блок
finally, если он присутствует.
• Если обработчик не найден, вызывается стандартный
обработчик исключения.
19
Пример 1:
try {
// Контролируемый блок
}
catch ( OverflowException e ) {
// Обработка переполнения
}
catch ( DivideByZeroException ) {
// Обработка деления на 0
}
catch {
// Обработка всех остальных исключений
}
20
Пример 2: проверка ввода
if (u < 0)
static void Main() {
{ Console.WriteLine( "Недопустимое …" );
try
return; }
{
Console.WriteLine( "Введите напряжение:" );
double u = double.Parse( Console.ReadLine() );
Console.WriteLine( "Введите сопротивление:" );
double r = double.Parse(Console.ReadLine() );
double i = u / r;
Console.WriteLine( "Сила тока - " + i );
}
catch ( FormatException )
{
Console.WriteLine( "Неверный формат ввода!" );
}
catch
// общий случай
{
Console.WriteLine( "Неопознанное исключение" );
}
}
21
static void Main(string[] args)
{
try
{
int x = 5;
int y = x / 0;
Console.WriteLine($"Результат: {y}");
}
catch
{
Console.WriteLine("Возникло исключение!");
}
finally
{
Console.WriteLine("Блок finally");
}
Console.WriteLine("Конец программы");
Console.Read();
}
22
Рекомендации по программированию –
1/2
• Главная цель, к которой нужно стремиться, — получить легко читаемую
программу возможно более простой структуры.
• Создание программы начинают с определения ее исходных данных и
результатов (тип, диапазон).
• Затем записывают на естественном языке (возможно, с применением
обобщенных блок-схем), что именно и как должна делать программа.
• При кодировании необходимо помнить о принципах структурного
программирования: программа должна состоять из четкой последовательности
блоков — базовых конструкций.
• Имена переменных должны отражать их смысл. Переменные желательно
инициализировать при их объявлении.
• Следует избегать использования в программе чисел в явном виде (кроме 0 и 1).
• Программа должна быть «прозрачна». Для записи каждого фрагмента
алгоритма используются наиболее подходящие средства языка.
23
Рекомендации по программированию –
2/2
• В программе необходимо предусматривать реакцию на неверные
входные данные.
• Необходимо предусматривать печать сообщений или выбрасывание
исключения в тех точках программы, куда управление при
нормальной работе программы передаваться не должно.
• Сообщение об ошибке должно быть информативным и подсказывать
пользователю, как ее исправить.
• После написания программу следует тщательно отредактировать.
• Комментарии должны представлять собой правильные предложения
без сокращений и со знаками препинания.
24
Операция new
Операция new служит для создания нового объекта. Формат
операции:
new тип ( [ аргументы ] )
С помощью этой операции можно создавать объекты как ссылочных,
так и значимых типов, например:
object z = new object();
int i = new int();
// то же самое, что int i = 0;
Операции отрицания
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
sbyte a = 3, b = -63, c = 126;
bool d = true;
Console.WriteLine( -a ); // Результат -3
Console.WriteLine( -c ); // Результат -126
Console.WriteLine( !d ); // Результат false
Console.WriteLine( ~a ); // Результат -4
Console.WriteLine( ~b ); // Результат 62
Console.WriteLine( ~c ); // Результат -127
}}}
Умножение
• Операция умножения (*) возвращает результат перемножения двух
операндов.
• Стандартная операция умножения определена для типов int, uint,
long, ulong, float, double и decimal.
• К величинам других типов ее можно применять, если для них
возможно неявное преобразование к этим типам. Тип результата
операции равен «наибольшему» из типов операндов, но не менее
int.
• Если оба операнда целочисленные или типа decimal и результат
операции слишком велик для представления с помощью заданного
типа, генерируется исключение System.OverflowException
Результаты вещественного умножения
*
+y
-y
+0
-0
+∞
-∞
NaN
+x
+z
-z
+0
-0
+∞
-∞
NaN
-x
-z
+z
-0
+0
-∞
+∞
NaN
+0
+0
-0
+0
-0
NaN
NaN
NaN
-0
-0
+0
-0
+0
NaN
NaN
NaN
+∞
+∞
-∞
NaN
NaN
+∞
-∞
NaN
-∞
-∞
+∞
NaN
NaN
-∞
+∞
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
NaN
Пример
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
int x = 11, y = 4;
float z = 4;
Console.WriteLine( z * y );
// Результат 16
Console.WriteLine( z * 1e308 ); // Рез. "бесконечность"
Console.WriteLine( x / y );
// Результат 2
Console.WriteLine( x / z );
// Результат 2,75
Console.WriteLine( x % y );
// Результат 3
Console.WriteLine( 1e-324 / 1e-324 ); // Результат NaN
}}}
Операции сдвига
• Операции сдвига (<< и >>) применяются к целочисленным
операндам. Они сдвигают двоичное представление первого
операнда влево или вправо на количество двоичных разрядов,
заданное вторым операндом.
• При сдвиге влево (<<) освободившиеся разряды обнуляются. При
сдвиге вправо (>>) освободившиеся биты заполняются нулями, если
первый операнд беззнакового типа, и знаковым разрядом в
противном случае.
• Стандартные операции сдвига определены для типов int, uint, long и
ulong.
Пример
using System;
namespace ConsoleApplication1
{ class Class1
{ static void Main()
{
byte a = 3, b = 9;
sbyte c = 9, d = -9;
Console.WriteLine( a << 1 );
Console.WriteLine( a << 2 );
Console.WriteLine( b >> 1 );
Console.WriteLine( c >> 1 );
Console.WriteLine( d >> 1 );
}
}
}
// Результат 6
// Результат 12
// Результат 4
// Результат 4
// Результат -5
Download