Объединение данных с функциями их обработки в сочетании со скрытием ненужной для использования этих данных информации называется инкапсуляцией (Encapsulation). Принцип инкапсуляции в ООП реализуются с помощью механизма классов. Класс это абстрактный тип данных, определяемый пользователем, который описывает общие для всех объектов этого класса свойства (данные) и поведение (функции). Использование принципа инкапсуляции
· повышает надежность программ,
· повышает степень абстракции программ,
· обеспечивает независимую разработку отдельных частей (классов) программы.
Наследование (Inheritance) – это возможность создания иерархии классов, в которой потомки (производные классы, наследники) получают элементов своих предков (родителей, базовых классов), могут их изменять и добавлять новые.
Полиморфизм (Polymorphism) - это возможность использовать в различных классах иерархии одно имя для обозначения различных по смыслу действий. Например, сложение строк – это конкатенация, а сложение бинарных строк – это бинарное сложение.
Использование принципов наследования и полиморфизма
· повышает надежность программы
· сокращает избыточность кода
· сокращает сроки разработки
· дает возможность создания библиотек классов для различных применений
Таким образом, объектно-ориентированное программирование может эффективноиспользоваться для создания больших надежных программных систем.
Объектно-ориентированный подход в программировании целесообразно применять, если требуется построить именно иерархию классов, иначе можно ограничиться модульной технологий программирования.
Основным достоинством объектно-ориентированного программирования по сравнению с модульным программированием является «более естественная» декомпозиция программного обеспечения, которая существенно облегчает его разработку. Это приводит к более полной локализации данных и интегрированию их с подпрограммами обработки, что позволяет вести практически независимую разработку отдельных частей (классов) программы. Механизмы наследования и полиморфизма позволяют конструировать сложные объекты из сравнительно простых. В результате существенно увеличивается показатель повторного использования кодов и появляется возможность создания библиотек классов для различных применений.
Кроме того, благодаря тому, что программа представляется в терминах поведения объектов, при программировании используются понятия, более близкие к предметной области, а следовательно программа легче читается и понимается.
Бурное развитие технологий программирования, основанных на объектном подходе, позволило решить многие проблемы. Так были созданы среды, поддерживающие визуальное программирование, например, Delphi, С++ Builder, Visual Studio и т. д. При использовании визуальной среды у программиста появляется возможность проектировать некоторую часть, например, интерфейсы будущего продукта, с применением визуальных средств добавления и настройки специальных библиотечных компонентов. Результатом визуального проектирования является заготовка будущей программы, в которую уже внесены соответствующие коды.
Тема 2. Структура программы на С#
Как было отмечено выше, принцип инкапсуляции в ООП реализуются с помощью механизма классов. Класс является абстрактным типом данных, определяемым пользователем, и содержит описание данных и функций для работы с этими данным.
Для создания простейшего класса в С# используют запись
class имя_класса
{список элементов};
Обычно класс содержит следующие элементы:
· поля, определяющие данные которые хранит класс (свойства объектов)
· методы, определяющие функции обработки этих данных (поведение объектов).
Синтаксис описания полей класса в С# в целом соответствует синтаксису описания переменных в языке С. Синтаксис описание методов в С# в целом соответствует – синтаксису описанию функций в языке С.
Однако работа с полями и методам класса отличается от работы с обычными переменными и функциями. Для того чтобы обратиться к любому элементу класса (полю или методу) используют операцию уточненного имени
имя_класса.имя_элемента
или
имя_объекта_класса.имя_элемента
Программист может описывать собственные классы и также может использовать стандартные классы.
Например, для ввода-вывода данных для консольных приложений в языке С# используется стандартный класс с именем Console из библиотеки классов.Net[3].
Для того чтобы использовать любой из его методов в программе необходимо использовать следующую запись:
Console.имя_метода([список параметров]).
Например, для вывода данных на экран используется метод WriteLine. Метод является переопределенным и может использоваться с разными параметрами. Для вывода строки на экран используется метод WriteLine с параметром строковой константы, например:
Console. WriteLine (“Hello, World”);
Все стандартные классы библиотеки .Net и классы, которые создает программист организованы в единую иерархическую структуру классов с одним общим предком – классом object. Внутри этой иерархии классы сгруппированы в так называемые пространства имен. Любая программа использует пространство имен System. В этом пространстве имен определены классы, обеспечивающие базовые функции программы: ввод-вывод, математические операции, управление памятью и др. Например, упомянутый выше класс Console описан именно в пространстве имен System. Для того, чтобы в программе использовать стандартный класс можно перед его именем указать через точку имя пространства имен, например,
System.Console.WriteLine("\nHello, World!\n");
Однако удобнее для использования стандартных класс в начале программы подключить соответствующее пространство имеем с помощью директивы
using Имя-простаства_имен
Например, чтобы использовать класс Console подключают пространство имен System:
using System;
В этом случае в программе можно непосредственно использовать имя класса без указания его пространства имен, например,
Console. WriteLine (“Hello, World”);
Рассмотрим простейшую программу, выводящую на экран строку Hello, world.
// Program.cs
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main()
{
Console.WriteLine("\nHello, World!");
Console.ReadKey();
}
}
}
В первой строке данной программы находится однострочный комментарий. В приведенном комментарии указано имя файла, в котором хранится исходный текст программы. В С#, так же как и в языке С, комментарии задаются двумя основными способами. Для однострочных комментариев используют символы //, как в нашем примере. Для многострочных комментариев можно использовать символы /* , */, между которыми и должен находится сам текст комментария. В тексте комментария могут содержаться любые символы, а вся последовательность символов эквивалентна символу пропуска (например, символу пробела). Комментарии не могут быть вложенными. Кроме того, в языке С# есть еще один способ задания комментариев, который используется для формирования документации к программе в формате XML. Такие комментарии начинаются с символов ///.
Во второй строке программы помещена команда препроцессора (директива) using. Данная директива, как было сказано выше, подключает указанное пространство имен, в данном случае System, что позволит использовать, в частности, класс для ввода-вывода данных Console.
В третьей строке программы с помощью ключевого слова namespace создается собственное пространство имен проекта. Обратите внимание, что при создании проекта в Visual Studio это имя пространства имен будет по умолчанию совпадать с именем проекта (в этом примере ConsoleApplication1), однако его можно изменить. Собственное пространство имен проекта создается для того, что в нем можно было описывать программные объекты (например, классы) с любыми именами, не заботясь о том, что объекты с такими именами существуют в других пространствах имен. Все объекты программы в данном пространстве имен описываются внутри операторах скобок языка C# {}.
Любая программа на языке C# представляет собой набор взаимодействующих между собой классов, следовательно, должна содержать хотя бы один класс. В нашем примере описан один класс с именем Program. Обратите внимание, что при создании проекта в Visual Studio имя класса будет по умолчанию совпадать с именем файла исходного текса с расширением .cs, однако его можно изменить.
В нашем примере class Program содержит только один элемент, а именно метод с именем Main.
Каждая программа должна содержать метод с именем Main, и работа программы начинается с именно с выполнения этого метода.
Любой метод в языке C#, как и функция в языке С, состоит из заголовка и тела. Заголовок метода должен в обязательном порядке определять его тип, имя и в круглых скобках список параметров (может быть пустой). В нашем примере метод Main имеет заголовок
static void Main()
Из данного заголовка видно, что тип этого метода void (спецификатор типа, указывающий, что метод не возвращает никакого значения), имя Main, а список параметров пуст. Спецификатор static означает, что данный метод класса является статическим, т.е. его можно использовать без создания объекта класса.
Тело метода определяет выполняемые в нем действия и представляет заключенную в фигурные скобки последовательность описаний и операторов. Каждое описание и оператор заканчивается символом ‘;’. В данном примере в теле метода Main нет явных описаний, а есть только два оператора:
Console.WriteLine("\nHello, World!");
Console.ReadKey();
Первый из них, как было указано выше, представляет собой вызов метода WriteLine (вывода на экран) из класса Console. В данном случае на экран выводится строка "\nHello, World!". Строковая константа в языке С# –это последовательность символов, заключенная в двойные кавычки.