русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Шаблоны функций.


Дата добавления: 2015-07-09; просмотров: 1206; Нарушение авторских прав


//функция

Int Abs(int N) {

Return N < 0 ? -N : N

}

//шаблон функции

template <class T> T Abs (T N)

{ Return N < 0 ? -N : N }

Компилятор генерирует свою версию функции для каждого нового числового типа данных (компилятор не обнаружит ошибки, если нет вызова функции)

Шаблон класса.

//класс Class IntList

{ Public:

List();

SetItem(int index, const int &Item);

GetItem(int index, int &Item);

Private:

Int Buffer[100]; };

//шаблон класса

template <Class T, int I> class CList

{ Public:

SetItem(int index, const T &Item);

GetItem(int index, T &Item);

Private: T Buffer[I];

};

В данном случае T – параметр типа, а I – параметр- константа типа int. Параметры устанавливаются при создании экземпляра класса.

CList <int, 100> IntList;

CList <double, 50> *DoubleList;

DoubleList = new CList <double, 50>;

Объектно-ориентированные особенности языка Java. Классы в Java. Применение интерфейсов и пакетов в Java. Динамическое определение типов (RTTI). Необходимость в динамическом определении типов. Применение метаклассов для получения динамической информации об объекте.

Особенности:

- отсутствуют указатели, шаблоны, множественное наследование

- Полностью объектно-ориентированный язык

- архитектурно-нейтральный и переносимый компилятор генерирует байт-код, кот. Не зависит от ОС. Для выполнения необходима виртуальная машина – JVM.

- есть механизм безопасности, автоматизирована работа с памятью (сборщик мусора), настраиваемая безопасность работы с аплетами.

- в большинстве случаев выполнение не пошаговое, а с предварительной компиляцией (Just In Time – компиляторы, некот. JVM включают Hot Spot компиляторы, т.е. компилится только части байт-кода, критичные ко времени)



Типы приложений:

- аплеты – работают в среде WEB-браузера, урезана часть функций (работа с файлами, вызов системных функций)

- сервлеты – исполняются на серверах приложений (Tomcat)

- портлет – часть окон браузера, кот. имеет свой обработчик на сервере

- хранимые процедуры для работы с БД

- обычные приложения

Всякий класс – наследник класса object

 

Кроме 4 групп типов всё представляется в виде объектов:

- Целые числа (byte, short, int, long)

- Вещественные числа (float, double)

- Символьный тип (char)

- Логический (boolean)

 

Шаблон класса

[модификаторы класса] class <имя класса> [extends <суперкласс>] [implement <список интерфейсов>]

{

<поля класса>

<блоки инициализации>

<конструкторы>

<реализация методов>

<встроенные классы>

}

 

Модификаторы класса:

[public] – класс доступен в любом месте программы (в любых пакетах), если не указан, то только в текущем пакете

[abstract] – не может быть создано экземпляров этого класса

[final] – не может быть наследников

 

Модификаторы доступа к полям:

public – общедоступный

protected – только из текущего и наследника

private – только из текущего

 

Модификаторы полей:

static – статическое поле

final – неизменяемое поле

ptransient – поле не сохраняется при сериализации объекта. Сериализация – сохранение экзепляра класса в файла на диск.

volatile – не учитывать при оптимизации программы

 

Шаблон метода:

[модификатор доступа][модификатор]<возвращаемый тип><имя>(<список параметров>)[throws <имя исключения>]

{}

Модификаторы методов (все методы – виртуальные):

static – статическое метод

final – невозможно переопределять метод в наследниках

abstract – метод не реализуется, а только объявляется

native – метод реализован как внешняя библиотека в целевой платформе

synchronized – объект блокируется при работе с методом

 

в Java можно строить одни конструкторы на основе других

 

class Point

{

Point()

{ this(0, 0); }

}

Интерфейсы как полностью абстрактный класс, т.е. только описание сигнатуры методов без реализации. Интерфейс – заготовка класса. Шаблон interface <Имя> {<описание сигнатуры>}

Назначение интерфейса – описание некот. протокола взаимодействия между классами. Интерфейс используется как обычный абстрактный класс. Возможно наследование интерфейсов как и клаcсов.

Java позволяет создавать классы наследники, предок – суперкласс.

class Point3D extends Point {…}

overloading – определение с другой сигнатурой

overdiniry – замещение в классе наследнике

Для невозможности замещения в наследниках использовать final.

Автоматическая очистка памяти (сборщик мусора), когда на объект не остаётся ссылок он уничтожается, что бы уничтожить a = null.

 

Пакеты – аналог пространства имён, если не указать пакет, то классы попадают в безымянный пакет.

 

Динамическое определение типов RTTI.

RTTI для:

1) проверка типа объекта при выполнении программы

2) Использование метаклассов

3) Использование оператора instanceof – позволяет определить принадлежность объектов к некот. типу

 

Основная идея – определить точный тип объекта обладая ссылкой на базовый тип. При выполнении программы проверяется тип объекта.

Object o = new Circle();

--------

((Circle) o).draw();

Метаклассы позволяют получать информацию о типах во время выполнения программы. Метакласс хранит в себе информацию о классе. Для каждого класса в проге есть свой метакласс. Информация о каждом классе сохраняется в файл <имя класса>.class. Во время выполнения проги JVM проверяет загружен ли метакласс для этого класса, если нет, то ищется соответствующий файл и загружается в память (проги на Java загружаются неполностью). Если метакласс загружен, то используется при создании.

Class.forName(“Class1”) позволяет загрузить метакласс с этим именем и возвращает ссылку на объект типа класса (на метакласс). Загрузка без создания экземпляра.

Получение ссылки на метакласс: Class c2 = Class2.class // Class2 обычный тип.

Второй метод безопаснее, так как наличие метакласса проверяется при компиляции.

Возможно получение информации о полях, методах, конструкторах, родительских классов.

 

Контейнеры:

1)коллекции – группа произвольных элементов, List – список, хранение разных элементов, Set – множество, список не повторяющихся элементов

2)таблицы – набор пар значений: ключ и !!! ещё чего-то

6. Объектно-ориентированные особенности языка C#. Классы в C#. Пространства имен в C#. Свойства, индексаторы, типы-делегаты в языке C#. Унифицированная система типов в языке C#

C# – основной язык при разработке программ для MS .NET. Полностью объектно-ориентированный. Обеспечивает полный контроль и безопасность чем Java и C++.

Класс – набор свойств, методов и событий, объединённых в единое целое.

Описание классов не отличается (или не сильно отличается) от написания классов на C++ и Java, единственное отличие от С++ нет глобальных функций и глобальных переменных в чистом виде.

Пространство имён (namespace) – логическая структура для организации имён, используемых в приложении. Основное назначение – предупредить возможные конфликты между именами в разных сборках. (Полное название пространства имени + название класса должно быть уникально для одного приложения). В том числе и при использовании динамически подключаемых библиотек (сборок).

Свойства – скрывают обращения к методу класса под обращение к полю (методы get и set). Чаще используются в системах визуального программирования, когда при изменении поля класса необходимо выполнить какие-нибудь дествия.

public class Class1

{ private string m_str;// поле

---------

public string str// свойство

{ get

{ return m_str; }

set

{ if (value != null)

{ m_str = value; } } } }

Индексаторы – элементы классов (структур, интерфейсов), позволяют обращаться с объектами класса как с массивами.

public class BitSet

{

private int m_bits;// поле

---------

public bool this[int i]// свойство

{get

{ if ((0 <= i) && (i < 32))

{ return ((m_bits & 1 << i) != 0); }

Else { return false; }

} set

{ if ((0 <= i) && (i < 32))

{ if (value)

{ bits |= 1 << i; }

Else { bits &= ~ (1 << i); } // стираем i-ый бит

}}}}

BitSet b = new BitSet();

b[2] = false; b[3] = true;

 

Тип – общий термин, который может относиться к классам, структурам, интерфейсам, перечислениям и прочему.

Делегаты – это безопасный для типов эквивалент указателя на функцию в C. Однако между ними есть и существенное отличие. Делегат C# - это уже не просто адрес в оперативной памяти, а класс, произвольный от базового класса MulticastDelegate. Делегаты очень близки в тех ситуациях, когда нужно, чтобы одна сущность передела вызов другой сущности.

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

public class Employee

{ private bool isWorking;

public Employee()

{ isWorking = false; }

public bool Working

{ get

{ return isWorking; }

set

{ isWorking = value; }

}

public delegate void EmpDelegate(Employee e);

}

public class Company

{ ArrayList Employees = new ArrayList();

public Company()

{ Employess.Add(new Employee("Иванов И.И."));

-------}

/// <summary>

/// групповая обработка сотрудников

/// </summary>

/// <param name="proc"></param>

public void ProcessEmployees(Employee.EmpDelegate proc)

{ foreach (Employee e in Employees)

{ proc(e); } // вызов метода

}

}

/// <summary>

/// демонстрации работы делегата

/// </summary>

public class TestApp

{ public static void Employ(Employee e)

{ if (e.Working)

{ Console.WriteLine("Уже принят"); }

else

{ e.Working = true;

Console.WriteLine("Сотрудник принят");

}

public static void Main()

{ Company c = new Company();// принять всех сотрудников компании

c.ProcessEmployees(new Employee.EmpDelegate(Employ)); }}}

 

Все типы данных рассматриваются как объекты и являются производными от класса System.Object. даже примитивные (int, double, string и так далее). Класс System.Object определяет общее полиморфическое поведение для всех типов данных.

 



<== предыдущая лекция | следующая лекция ==>
Применение виртуальных функций. | Всего:80 вопросов.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 1.37 сек.