Файл: Современной налоговой системы РФ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 04.04.2023

Просмотров: 55

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Если требуется получить указатели на примитивные типы, то используются классы-обёртки примитивных типов: Boolean, Character, Byte, Short, Integer, Float, Long, Double.

Для наследования классов в Java используют ключевое слово extends - расширять. Для интерфейсов используют ключевое слово implements – реализовывать. Классы могут наследовать другие классы или реализовывать интерфейсы. Интерфейсы так же могут наследовать или расширять другие интерфейсы.

В Java классы не могут наследовать более чем одному классу, но могут реализовывать несколько интерфейсов. Множественное наследование интерфейсов в Java не запрещается, то есть от нескольких интерфейсов может наследоваться один.

Пример наследования класса:

public class MyThread extends Thread{

...

}

Все методы классов в Java являются виртуальными, если не указано специально обратное. Пример полиморфизма в Java представлен ниже.

class OnePoint {

public void draw() {

System.out.println(".");

}

}

class TwoPoint extends OnePoint {

public void draw() {

System.out.println("..");

}

}

В Java отсутствуют дружественные классы, но особые права доступа к каким-то членам класса, можно определить для классов, входящих в один пакет, если для таких членов класса не определять модификатор доступа.

Ниже приведен пример доступа к членам класса только из классов данного пакета.

package points;

class OnePoint {

void draw() {

System.out.print(".");

}

}

class TwoPoint {

public void draw() {

OnePoint p = new OnePoint();

for(int i = 0; i < 2; i ++){

p.draw();

}

}

}

В Java основой инкапсуляции является класс.

При определении доступа к членам классов, для них определяются модификаторы доступа:protected, public, private.

Таблица 2. Модификаторы доступа в Java

Модификатор доступа

Область доступа

public

Без ограничений

private

Только для данного класса

protected

Для данного класса и его потомков

Без модификатора

Для всех классов данного пакета

В Java классы могут иметь неограниченное количество конструкторов, с разным количеством и типами аргументов. Деструкторы в языке Java не предусмотрены. Удаляет объекты из памяти Java – машина.

Ниже приведен пример применения в Java нескольких конструкторов класса.

class OnePoint {

private int count;

public OnePoint() {

count = 1;

}

public OnePoint(int n) {


count = n;

}

}

В Java не поддерживается перегрузка операторов.

Исходный код приложения для тестирования работы с классами в Java набран в редакторе Notepad++ и приведен в приложении Б.

Скомпилировано тестовое приложение Java компилятором javaс. Результат представлен на рисунке 3.

Рисунок 3 - Результат компиляции Java – приложения

Результат работы тестового Java – приложения изображен на рисунке 4.

Рисунок 4 - Результат выполнения Java – приложения

2.3. C#

Объектно-ориентированный язык программирования C# (произносится «си шарп») в 1998—2001 годах создала группа инженеров под руководством Андерса Хейлсберга, в компании Microsoft как язык разработки приложений для платформы Microsoft .NET Framework.

C# был в дальнейшем стандартизирован по ISO/IEC 23270 и ECMA-334 [3].

Название «Си шарп» (от англ. sharp — диез) произошло от музыкальной нотации, где знаком диез, обозначается повышение на полутон соответствующего ноте звука. В этом прослеживается аналогия с названием языка C++, где символы «++» обозначают операцию инкремента переменной. Название так же можно рассматривать как игру с цепочкой символов C→C++→C++++(C#), так как символ «#» может быть составлен из 4х знаков «+».

В языке C# все типы являются классами и связаны отношениями наследования. Базовым родительским классом служит класс Object [10].

Ниже представлен пример объявления нового класса в C#, который наследует другой класс.

class OnePoint

{

...

}

class TwoPoint : OnePoint

{

...

}

Если в базовом классе и в классе наследника определены конструкторы, то при вызове конструктора базового класса используют ключевое слово base. Ниже приведен пример вызова конструктора базового класса из класса наследника.

class OnePoint

{

public OnePoint(string color){};

}

class TwoPoint : OnePoint

{

public TwoPoint(int count):base(string color) {};

}

Если производный класс является наследником базового класса, то он получает все методы, свойства, поля и события базового класса[13]. При создании производного класса может быть выбрана одна из следующих возможностей:

  1. переопределить виртуальные члены базового класса;
  2. наследовать наиболее подходящий метод базового класса без переопределения;
  3. заново определить не виртуальную реализацию необходимых членов, которая скроет реализацию базового класса.

Ниже привен пример переопределения метода в C#.

public class OnePont

{

public virtual void Draw() { }

}

public class TwoPoint : OnePoint

{

public override void Draw() { }

}

В C# модификатором доступа для типов и членов типов является ключевое слово «internal». Внутренние члены и типы, объявленные как internal, доступны только в файлах, входящих в одну и ту же сборку.

Ниже приведен пример использования ключевого слова «internal».

// Assembly1.cs

// Сборка выполнялась с параметром: /target:library

internal class ClassBase

{

public static int intM = 0;

}

class CheckAccess

{

static void Main()

{

ClassBase myBase = new ClassBase(); // ошибки нет

}

}

Если CheckAccess находится в другой сборке:

// Assembly1_a.cs

// Сборка выполнялась с параметром: /reference:Assembly1.dll

class CheckAccess

{

static void Main()

{

ClassBase myBase = new ClassBase (); // CS 0122 ошибка

}

}

Инкапсуляция в C# реализуется с использованием модификаторов доступа. Ниже представлен список модификаторов доступа в C#:

  • public – доступ возможен из любого места в одной сборке, либо из другой сборки, на которую присутствует ссылка;
  • protected – доступ возможен только внутри класса или при наследовании в классе-наследнике;
  • internal – доступ возможен только из сборки, в которой выполнено объявление;
  • private – доступ возможен только внутри класса;
  • protected internal - доступ возможен из одной сборки или из класса-наследника в другой сборке.

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

Если в коде не представлены конструкторы для объектов, то C# создает конструкторы по умолчанию, которые создают экземпляры объектов и задают переменным - членам класса значения по умолчанию.

Ниже приведен пример определения конструктора для класса.

public class OnePoint

{

public OnePoint()

{

...

}

}

Как было сказано выше, классы в C# могут иметь произвольное количество конструкторов.

В C# деструкторы применяются для уничтожения экземпляров классов. Для класса может быть определен только один деструктор. Деструкторы нельзя наследовать или перегружать. Деструкторы вызвать невозможно. Они выполняются автоматически. Деструкторы не принимают модификаторы и не имеют параметров.


Пример определения деструктора представлен ниже.

class OnePoint

{

~OnePoint() // деструктор

{

...

}

}

Для перегрузки оператора в C#, нужно написать функцию с указанием имени, а затем символа оператора, для которого выполняется перегрузка.

Ниже приведен пример перегрузки оператора + для класса боьших чисел:

public static HugeNumber operator+( HugeNumber a, HugeNumber b)

{

return new HugeNumber (a + b);

}

Для тестирования приведенных выше теоретических аспектов создано приложение на языке C# в среде Microsoft Visual Studio 2010 Express.

Окно Microsoft Visual Studio 2010 Express изображено на рисунке 5. Исходный код разработанной программы представлен в приложении В.

Рисунок 5 - Окно Microsoft Visual Studio 2010 Express

На рисунке 6 представлен результат выполнения разработанного приложения.

Рисунок 6 - Результат выполнения приложения на языке C#

Таким образом, проведенное исследование показало, что наиболее популярные современные языки программирования разработаны с приоритетом объектно-ориентированного подхода, а в языках Java и C# невозможен иной принцип разработки приложений.

Синтаксически все рассмотренные языки программирования имеют свои особенности, но программисту, владеющему любым из этих языков, не составит большого труда освоить и остальные.

Заключение

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

Во второй главе были исследованы принципы объектно-ориентированного программирования, реализованные в C++, Java, C#.

Были исследованы способы создания и уничтожения объектов, для каждого языка была исследована поддержка следующих объектно– ориентированных принципов:

  • типы данных;
  • наследование;
  • полиморфизм;
  • инкапсуляция;
  • дружественные функции и классы;
  • конструкторы и деструкторы;
  • перегрузка операторов.

Поддержка перегрузки методов не исследовалась, т.к. она поддерживается всеми рассмотренными языками программирования.

Результаты исследования могут быть кратко сформулированы следующим образом:

    1. Всеми рассмотренными языками поддерживается создание объектов на базе описанных классов, для этого используются конструкторы класса;
    2. Всеми рассмотренными языками поддерживается наследование классов;
    3. Всеми рассмотренными языками поддерживается полиморфизм;
    4. Дружественные классы и функции рассмотренные языки программирования поддерживают, но C# имеет синтаксис отличный от общепринятого, ключевое слово friend в нем отсутствует;
    5. Всеми рассмотренными языками поддерживается инкапсуляция;
    6. В языке Java не поддерживаются деструкторы. В языке C# деструктор не может быть явно вызван, его вызывает среда выполнения при уничтожении объекта;
    7. Перегрузку операторов не поддерживает Java.

По результатам проведенного исследования можно сделать вывод, что в основе наиболее популярных современных языков программирования лежат принципы объектно–ориентированного программирования.

При уничтожении объекта в C# вызывается описанный деструктор, несмотря на то, что явный вызов деструктора не предусмотрен.

В целом общие принципы объектно– ориентированного программирования являются универсальными наиболее популярные современные языки программирования их поддерживают..

Список литературы

      1. Блох Дж. - Java. Эффективное программирование—М.: Издательство"Лори", 2008.— 220 с.
      2. Ватсон Б. - С# 4.0 на примерах, Пер. с англ. – Спб.: Издательский дом «БХВ-Петербург», 2011. – 608 с.: ил
      3. Гросс К. - С# 2008. – Спб.: Издательский дом «БХВ-Петербург», 2009. – 576 с.: ил
      4. Литвиненко Н. А. - Технология программирования на C++. Win32 API-приложения – М.: Издательство «БХВ-Петербург», 2010. – 288 с.: ил.
      5. Нейгел К., Ивьен Б, Глин Дж., Уотсон К., Скиннер М. - C# 4.0 и платформа .NET 4 для профессионалов, Пер. с англ. – М.: Издательский дом «Вильямс», 2011. – 1440 с.: ил.
      6. Перроун П., Венката С., Чаганти Р. Создание корпоративных систем на основе Java 2 Enterprise Edition. Руководство разработчика, Пер. с англ. – М.: Издательский дом «Вильямс», 2001. – 1184 с.: ил.
      7. Солтер Н., Клепер С. Дж. - C++ для профессионалов, Пер. с англ. – М.: Издательский дом «Вильямс», 2006. – 912 с.: ил.
      8. Страуструп Б - Язык программирования С++, Пер. с англ. – М.: Издательство «Бином», 2011. – 1136 с.: ил.
      9. Физерс М. К. - Эффективная работа с унаследованным кодом, Пер. с англ. – М.: Издательский дом «Вильямс», 2009. – 393 с.: ил.
      10. Фленов М. - Библия C#. – Спб.: Издательский дом «БХВ-Петербург», 2011. – 560 с.: ил
      11. Хорстманн С., Корнелл Г. - Core Java 2, 7th Edition / Java 2. Библиотека профессионала, Пер. с англ. – М.: Издательский дом «Вильямс», 2007. – 896 с.: ил.
      12. Шилдт Г. - С++ Базовый курс, Пер. с англ. – М.: Издательский дом «Вильямс», 2010. – 624 с.: ил.
      13. Шилдт Г. - C# 4.0 полное руководство, Пер. с англ. – М.: Издательский дом «Вильямс», 2011. – 1056 с.: ил.
      14. Шилдт Г. - Полный справочник по Java. Java SE™ 6 Edition — 7-е изд. — М.: Вильямс, 2007. — 1040 с.
      15. Эккель Б. - Философия Java, Пер. с англ. – Спб.: Издательский дом «Питер», 2009. – 638 с.: ил.