СОДЕРЖАНИЕ
1. Проведение компьютерного тестирования по дисциплинам «Системы автоматизированного проектирования», «Графика и визуализация» со студентами третьего курса ………………………… |
3 |
2. Создание программы для расчета площади многоугольника средствами Delphi, транслирование программного кода на язык программирования C#........................................................................... |
9 |
3. Интеграция Python и других систем программирования………….. |
15 |
Выводы……………………………………………………………………. |
18 |
Список использованных источников…………………………………… |
19 |
|
|
|
|
|
|
1. ПРОВЕДЕНИЕ КОМПЬЮТЕРНОГО ТЕСТИРОВАНИЯ ПО ДИСЦИПЛИНАМ «СИСТЕМЫ АВТОМАТИЗИРОВАННОГО ПРОЕКТИРОВАНИЯ», «ГРАФИКА И ВИЗУАЛИЗАЦИЯ» СО СТУДЕНТАМИ ТРЕТЬЕГО КУРСА
В рамках научно-исследовательской работы проведено компьютерное тестирование студентов третьего курса в автоматизированной системе для тестирования, созданной средствами Macromedia Authorewere 7. Время прохождения тестирования студентами было ограничено и составляло 10 минут.
Тестирование по учебной дисциплине «Системы автоматизированного проектирования» разработчика студента группы ДГ-ИТ8-1 Меркулова М.С. проходили 4 человека из группы ДГ-ИТ9-1. Титульная страница пособия и страница содержания пособия представлены на рисунках 1.1– 1.2.
Рисунок 1.1 – Титульная страница пособия
Рисунок 1.1 – Страница содержания пособия
Результаты тестирования представлены в таблице 1.1.
Таблица 1.1 – Результаты компьютерного тестирования студентов по дисциплине «Системы автоматизированного проектирования»
Фамилия студента |
Результат тестирования |
Жовтан А. |
Продолжение таблицы 1.1
|
|
Карнаухов Ю. |
|
Западенец Т. |
Продолжение таблицы 1.1
|
|
Хмилевский А. |
|
Тестирование по учебной дисциплине «Графика и визуализация» разработчика студента группы ДГ-ИТ7-1 Шевченко А.А. проходили 2 человека из группы ДГ-ИТ9-1. Титульная страница пособия и страница содержания пособия представлены на рисунках 1.3– 1.4.
Рисунок 1.3 – Титульная страница пособия
Рисунок 1.4 – Страница содержания пособия
Результаты тестирования студентов представлены в таблице 1.2.
Таблица 1.2 – Результаты компьютерного тестирования студентов по дисциплине «Графика и визуализация»
Фамилия студента |
Результат тестирования |
Западенец Т. |
|
Хмилевский А. |
|
В результате прохождения тестирования, студентами выявлен ряд ошибок и неточностей системы компьютерного тестирования, в частности, это касается автоматического выставления оценок. По окончанию тестирования, в некоторых случаях оценка выводилась на экран некорректно, в процентном соотношении правильных и не правильных ответов.
Выводы: после прохождения студентами тестирования пособий по дисциплинам «Системы автоматизированного проектирования», «Графика и визуализация» показали неудовлетворительные результаты, так как студенты впервые ознакомились с системой, пособия запускались в тестовом режиме при ограниченном времени и результаты не учитывали выставление оценки от общего количества времени и общего количества вопросов.
2. СОЗДАНИЕ ПРОГРАММЫ ДЛЯ РАСЧЕТА ПЛОЩАДИ МНОГОУГОЛЬНИКА СРЕДСТВАМИ DELPHI, ТРАНСЛИРОВАНИЕ ПРОГРАММНОГО КОДА НА ЯЗЫК ПРОГРАММИРОВАНИЯ C#
В результате выполнения научно-исследовательской работы разработана программа с использованием объектно-ориентированного программирования для построения многоугольника и расчета его площади в интегрированной среде разработки Delphi, а также ее трансляция в язык программирования C#.
Листинг программы Delphi:
unit u_tri_main; // определяет имя модуля interface // начинается интерфейсная часть модуля uses //содержит сведения о других модулях, которые использует данный модуль Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type // типы
tDrawPolygon = class; // создание класса tDrawPolygon
Tfrm_sqr = class(TForm) // создание дочернего класса Tfrm_sqr от TForm lb_points: TListBox; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); // процедура для закрытия приложения по кнопке procedure FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // процедура для передачи клика мышью, чтобы нарисовать и замкнуть многоугольник procedure FormCreate(Sender: TObject); // процедура создания формы procedure FormPaint(Sender: TObject); // процедура для рисования на форме private // скрытые данные public // открытые данные poly : tDrawPolygon; //отношение полигона к классу tDrawPolygon end;
tDrawPolygon = class(tList) // объявляется класс tDrawPolygon как наследник класса tList protected //защищенный раздел объявлений определения класса function get_point(index : integer):tPoint; //Функция Point определяет тип данных integer и возвращает значение TPoint function sqr_trap(ind_1, ind_2 : integer):double; // функция для определения высоты и полусуммы оснований public // открытые данные isFull : boolean; //замкнутость фигуры procedure render(dc : hdc); // процедура для рисования соединительных линий между вершинами property point[index : integer]:tPoint read get_point;default; // Property определяет управляемый доступ к полям класса function square : double; // функция определения площади end;
var frm_sqr: Tfrm_sqr; implementation {$R *.dfm}
const // раздел констант
SZ_POINT = 2; // размер точек 2 пикселя
function tDrawPolygon.get_point(index : integer):tPoint; // метод, читающий значение векторного свойства, описан как функция, возвращающая значение того же типа, что и элементы свойства, и имеющая единственный параметр того же типа и с тем же именем, что и индекс свойства begin Result := pPoint(items[index])^; // свойство и индекс свойства end;
function tDrawPolygon.sqr_trap(ind_1, ind_2 : integer):double; // функция определения высоты и полусуммы оснований begin Result := (point[ind_2].X - point[ind_1].X)* // высота (point[ind_1].Y + point[ind_2].Y)/2; // полусумма оснований end;
function tDrawPolygon.square : double; // функция определения площади var i : integer; begin Result := 0.0; // площадь приравнивается к 0 for i:=1 to Count-1 do // определение координат вершин Result := Result + sqr_trap(i-1,i); //добавление координат вершин Result := abs(Result + sqr_trap(count-1,0)); //определение площади end; |
procedure tDrawPolygon.render(dc : hdc); //процедура рисования многоугольника var i : integer; begin if count > 0 then //если количество точек больше 0, то begin SelectObject(dc, GetStockObject(BLACK_PEN)); // цвет пера MoveToEx(dc,point[0].X,point[0].y,nil); // рисование точки // рисование линий for i:=1 to Count-1 do LineTo(dc,point[i].X, point[i].Y); if isFull then LineTo(dc,point[0].X, point[0].Y); for i:=0 to Count-1 do Rectangle(dc,point[i].X-SZ_POINT, point[i].Y - SZ_POINT, point[i].X+SZ_POINT, point[i].Y + SZ_POINT); end; end; // рисование линий закончилось
procedure Tfrm_sqr.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); // Key – это переменная, содержащая код нажатой клавиши; #27 код символа Esc; Close – команда закрытия формы. Если запустить программу и нажать Esc,то приложение закроется begin if key = 27 then close; // если нажата ESC – закрыть приложение end;
procedure Tfrm_sqr.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); // процедура для рисования точек var p : ^tPoint; i : integer; sq : double; begin if not poly.isFull then // если многоугольник не замкнут, то case Button of // определять точку по mbLeft: // щелчку лкм begin new(p); // созданная точка p.X := X; p.Y := Y; //координаты точки poly.Add(p); // добавление точки invalidate; // объект перерисовывается заново end; mbRight: // по щелчку пкм if poly.Count >= 3 then // если количество точек больше или равно 3, тогда begin poly.isFull := true; // замкнуть многоугольник sq := poly.square; //площадь многоугольника Caption := format('Площадь = %.2f',[sq]); // вывод площади в название формы for i:=0 to poly.Count-1 do // определение координат lb_points.Items.Add(format('%d : x = %d y = %d', [i,poly.point[i].X, poly.point[i].Y] )); // вывод координат в лист бокс lb_points.Items.Add('-------------------------'); // разделительная линия lb_points.Items.Add(format('Площадь = %.2f',[sq])); // вывод площади в лист бокс invalidate; // объект перерисовывается заново end; end; end;
procedure Tfrm_sqr.FormCreate(Sender: TObject); // процедура создания полигона begin poly := tDrawPolygon.Create; end;
procedure Tfrm_sqr.FormPaint(Sender: TObject); // процедура рисования полигона на форме var dc : HDC; // контекст рендеринга, он необходим для OpenGL, чтобы рисовать на форме. begin dc := GetDC(Handle); // определение места на которое будет осуществляться вывод. В нашем случае это окно формы poly.render(dc); //рисование в окне формы ReleaseDc(Handle,dc); //освобождает контекст устройства (DC) для использования другими приложениями end; end. |
Рисунок 5.2 – Результат работы программы
Листинг программы C#:
using System; //область имен с системными базовыми классами using System.Collections.Generic; //коллекции, что-то вроде шаблонов using System.Drawing; //классы для рисования using System.Linq; //классы для работы с массивами и коллекциями using System.Windows.Forms; //классы для операции с формами
namespace Pro_Tri //название программы { public partial class Form1 : Form //доступный всем, разделённый на несколько файлов, класс с именем Form1 - наследник класса Form { public const int SZ_POINT = 2;// размер точки 2 пикселя public DrawPolygon poly; // открытые данные public Form1()// открытые данные { InitializeComponent();//метод, автоматически записываемый конструктором форм при создании / изменении форм poly = new DrawPolygon();//прорисовка нового полигона } public class DrawPolygon // объявление класса DrawPolygon { public bool IsFull { get; set; }//замкнуть многоугольник private readonly List<Point> points = new List<Point>();//Функция Point определяет тип данных integer и возвращает значение TPoint
public DrawPolygon()// открытые данные { IsFull = false; //многоугольник не замкнут points = new List<Point>();//вывести новые вершины }
public Point GetPoint(int index) // открытые данные о функции, возвращающей значение того же типа, что и элементы свойства { return points[index]; ) // открытые данные о функции, возвращающей значение того же типа, что и элементы свойства } public double SqrTrap(int ind1, int ind2) // функция для определения высоты и полусуммы оснований { return (points[ind2].X - points[ind1].X) * (points[ind2].Y + points[ind1].Y) / 2.0; // рассчет высоты и полусуммы оснований } public double Square()//рассчет площади { double result = 0.0; // площадь приравнивается к 0 for (int i = 1; i < points.Count; i++)// определение координат вершин { result += SqrTrap(i - 1, i); //добавление координат вершин } return Math.Abs(result + SqrTrap(points.Count - 1, 0)); //определение площади } public void Render(Graphics g) //процедура рисования многоугольника { if (points != null && points.Count > 0) //если количество точек больше 0, то { Point pred = points[0]; //считать вершины от 0 for (int i = 1; i < points.Count; i++)// наращивание массива вершин { g.DrawLine(new Pen(Color.Black, 1), points[i - 1], points[i]); // цвет пера для линий g.DrawRectangle(new
|
Pen(Color. Black, 1), points[i].X - SZ_POINT, points[i].Y - SZ_POINT, SZ_POINT * 2, SZ_POINT * 2); // цвет пера для точек } if (IsFull) g.DrawLine(new Pen(Color.Black, 1), points[points.Count() - 1], points[0]); // при замыкании многоугольника, цвет пера для линии g.DrawRectangle(new Pen(Color.Green, 1), points[0].X - SZ_POINT, points[0].Y - SZ_POINT, SZ_POINT * 2, SZ_POINT * 2); // при замыкании многоугольника, цвет пера для точки } } public void Add(Point point) //процедура добавления точек { points.Add(point); //добавить точку } public int Count()//функция определения количества точек { return points.Count; //количество точек } }
private void Form1_Paint(object sender, PaintEventArgs e) //процедура рисования на форме { poly.Render(e.Graphics); //рисование полигона }
private void Form1_MouseUp(object sender, MouseEventArgs e) // процедура для рисования точек { if (!poly.IsFull) // если многоугольник не замкнут { if (e.Button == MouseButtons.Left) //если щелкнуть лкм { poly.Add(new Point(e.X, e.Y)); //добавится вершина и определятся ее координаты Invalidate();// объект перерисовывается заново } else if (e.Button == MouseButtons.Right) //или щелчек пкм { if (poly.Count() > 2) //если количество вершин больше 2 { poly.IsFull = true; // возможно замкнуть многоугольник double sq = poly.Square();//площадь многоугольника Text = $"Площадь = {sq:0.00}";// вывод площади в название формы for (int i = 0; i < poly.Count(); i++)// определение координат { listBox1.Items.Add($"{i + 1} : x = {poly.GetPoint(i).X}; y = {poly.GetPoint(i).Y}");// вывод координат в лист бокс } listBox1.Items.Add("--------------------------");// разделительная линия listBox1.Items.Add($"Площадь = {sq:0.00}");// вывод площади в лист бокс Invalidate();// объект перерисовывается заново } } } }
private void Form1_KeyDown(object sender, KeyEventArgs e) //процедура закрытия приложения по кнопке Escape { if (e.KeyCode == Keys.Escape) //если нажата кнопка Escape { Close();//закрыть приложение } } } } |
Рисунок 5.2 – Результат работы программы
Выводы: трансляция программы – преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой.
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор [1].
Трансляция включает в себя несколько фаз: лексический, синтаксический, семантический анализ, генерация кода и его оптимизация.
Лексика языка программирования – это правила «правописания слов» программы, таких как идентификаторы, константы, служебные слова, комментарии. Лексический анализ разбивает текст программы на указанные элементы. Особенность любой лексики ее элементы представляют собой регулярные линейные последовательности символов.
Синтаксис языка программирования – это правила составления предложений языка из отдельных слов. Такими предложениями являются операции, операторы, определения функций и переменных. Особенностью синтаксиса является принцип вложенности (рекурсивность) правил построения предложений. Это значит, что элемент синтаксиса языка в своем определении прямо или косвенно в одной из его частей содержит сам себя.
Семантика языка программирования – это смысл, который закладывается в каждую конструкцию языка. Семантический анализ – это проверка смысловой правильности конструкции.
Генерация кода - это преобразование элементарных действий, полученных в результате лексического, синтаксического и семантического анализа программы, в некоторое внутреннее представление. Это могут быть коды команд, адреса и содержимое памяти данных, либо текст программы на языке Ассемблера, либо стандартизованный промежуточный код (например, P-код). В процессе генерации кода производится и его оптимизация [2].
3. ИНТЕГРАЦИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ В ДРУГИЕ СИСТЕМЫ ПРОГРАММИРОВАНИЯ, РАЗВИТИЕ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Язык программирования Python является сценарным языком, а значит его основное назначение - интеграция в единую систему разнородных программных компонентов. В большинстве случаев достаточно интеграции с использованием протокола. Например, интегрируемые приложения могут общаться через XML-RPC, SOAP, CORBA, COM, .NET и т.п. К примеру, при работе с Visual Studio необходимо использовать NuGet, найти в нем пакеты DynamicLanguageRuntime и IronPython, установить их. После этого появляется возможность запуска скриптов на Python таким образом [3]:
ScriptEngine engine = Python.CreateEngine();
//Здесь указывается python код
engine.Execute("print 'hello, world'");
Если же необходимо запустить скрипт из файла, это можно сделать так:
ScriptEngine engine = Python.CreateEngine();
engine.ExecuteFile("путь_к_скрипту/python_script.py");
В случаях, когда приложения имеют интерфейс командной строки, их можно вызывать из Python и управлять стандартным вводом-выводом, переменными окружения. Базовая реализация языка Python написана на C, поэтому Python имеет программный интерфейс Python/C API, который позволяет программам на C/C++ обращаться к интерпретатору Python, отдельным объектам, модулям и типам данных. Однако есть и другие варианты интеграции.
Например, для написания модулей расширения можно использовать специальный язык - Pyrex - который совмещает синтаксис Python и типы данных C. Компилятор Pyrex написан на Python и превращает исходный файл (например, primes.pyx) в файл на C - готовый для компиляции модуль расширения. Следует отметить, что для простых операций Pyrex применяет C, а для обращения к объектам Python - вызовы Python/C API. Таким образом, объединяется выразительность Python и эффективность C [4].
Также существует несколько возможностей использования языка Prolog из Python:
- версия GNU Prolog интегрируется с Python посредством пакета bedevere;
- имеется пакет PyLog для работы с SWI-Prolog из Python;
- можно использовать пакет pylog, который добавляет основные возможности Prolog в Python.
Эти три варианта реализуют различные способы интеграции возможностей Prolog в Python. Первый вариант использует SWIG, второй организует общение с Prolog-системой через конвертер, а третий является специализированной реализацией Prolog.
Язык Python (с помощью специальной его реализации – Jython) прозрачно интегрируется с языком Java: в Python-программе, выполняемой под Jython в Java-апплете или Java-приложении, можно использовать практически любые Java-классы.
Jython обладает следующими преимуществами над другими языками, использующими Java-байт-код:
- Jython-код динамически компилирует байт-коды Java, хотя возможна и статическая компиляция, что позволяет писать апплеты, сервлеты и т.п.;
- поддерживает объектно-ориентированную модель Java, в том числе, возможность наследовать от абстрактных Java-классов;
- Jython является реализацией Python - языка с практичным синтаксисом, обладающего большой выразительностью, что позволяет сократить сроки разработки приложений в разы [5].
Языком Delphi является Pascal, но не в том виде, в каком его используют для написания приложений MS-DOS, а в другой модификации - Object Pascal. В этом языке программирование как бы «привязывается» к определённым объектам - как визуальным, так и невизуальным, просто находящимся в памяти. Программирование простых приложений с интерфейсом командной строки (т.е. когда на экран последовательно выводятся строки текста и при этом пользователь вводит какие-либо данные) советуют также начинать с Pascal.
С помощью Delphi создаются приложения для операционной системы Windows, но помимо этого с помощью дополнительных средств можно написать, например, программы и для Linux. Среда Delphi легко расширяется установкой дополнительных модулей. Пользовательский интерфейс также хорошо настраиваемый - каждый организует рабочее пространство так, как ему будет удобно.
Delphi – результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании Borland Ltd. в Microsoft Corp. Существует также Delphi for .NET — среда разработки Delphi, а так же язык Delphi (Object Pascal), ориентированные на разработку приложений для .NET [6].
Среда разработки Visual Studio .Net. Наряду с языками программирования, включенными в среду фирмой Microsoft - Visual C++ .Net (с управляемыми расширениями), Visual C# .Net, J# .Net, Visual Basic .Net, - в среду могут добавляться любые языки программирования, компиляторы которых создаются другими фирмами-производителями. Таких расширений среды Visual Studio сделано уже достаточно много, практически они существуют для всех известных языков - Fortran и Cobol, RPG и Component Pascal, Oberon и SmallTalk [7].
ВЫВОДЫ
В результате выполнения научно-исследовательской работы проведено компьютерное тестирование студентов третьего курса в автоматизированной системе для тестирования, созданной средствами Macromedia Authorewere 7, в результате прохождения которого, студентами выявлен ряд ошибок и неточностей системы компьютерного тестирования, в частности, это касается автоматического выставления оценок.
Разработана программа с использованием объектно-ориентированного программирования для построения многоугольника и расчета его площади в интегрированной среде разработки Delphi, а также ее трансляция в язык программирования C#.
Размер программы Delphi–836 КБ;
Размер программы C# – 6,34 МБ.
Кратко рассматривались основные возможности интеграции интерпретатора Python и других систем программирования. Базовая реализация языка Python написана на C, поэтому Python имеет программный интерфейс Python/C API, который позволяет программам на C/C++ обращаться к интерпретатору Python, отдельным объектам, модулям и типам данных. Состав Python/C API достаточно обширен, поэтому речь шла лишь о некоторых основных его элементах.
Delphi – результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Студопедия. Трансляция программ [Электронный ресурс]. – URL: https://studopedia.ru/3_211543_translyatsiya-programm.html (дата обращения: 28.12.2021).
2. L2Soul.online. Трансляция и выполнение программы [Электронный ресурс]. – URL: http://www.automationlab.ru/index.php/2014-08-25-13-20-03/454-29---- (дата обращения: 02.01.2021).
3. НОУ Интуит. Интеграция Python и других систем программирования [Электронный ресурс]. – URL: https://intuit.ru/studies /courses/49/49/lecture/27082?page=5 (дата обращения: 07.01.2022).
4. Python. Встраивание Python в другое приложение [Электронный ресурс]. – URL: . https://translated.turbopages.org/proxy_u/en-ru.ru.aa695320-61e2d13f-0c00edef74722d776562/https/docs.python.org/3.11/extending /embed ding.html (дата обращения: 11.01.2022).
5. Digitologi.tech. Объединение нескольких языковв одном Python проекте [Электронный ресурс]. – URL: https://digitology.tech/docs/python_3/ extending/embedding.html (дата обращения: 15.01.2022).
6. Еремин А. Введение в Delphi [Электронный ресурс]. – URL: http://msk.edu.ua/ivk/Informatika/Uch_posobiya/Programmirovanie/Delphi_textbook/delphi-book_1.htm (дата обращения: 12.01.2022).
7. НОУ Интуит. Лекция 1: Visual Studio .Net, Framework .Net [Электронный ресурс]. – URL: https://intuit.ru/studies/courses/2247/ 18/lecture/540 (дата обращения: 14.01.2022).
8. Симагин А. Все известные программы на Delphi[Электронный ресурс] // Delphi sources.– URL: https://delphisources.ru/pages/articles/2019/programmi-napisannie-na-delphi.html (дата обращения: 10.12.2021).
9. Картаслов.ру — Карта слов и выражений русского языка [Электронный ресурс]. – URL: https://kartaslov.ru/карта-знаний/Разработка+программного+обеспечения (дата обращения: 10.12.2021).
10. Студопедия. [Электронный ресурс]. – URL: https://studopedia.ru/3_211543_translyatsiya-programm.html (дата обращения: 11.12.2021).
11. Stack Overflow. Разница между компилятором и интерпретатором [Электронный ресурс]. – URL: https://ru.stackoverflow.com/questions/606941/Разница-между-компилятором-и-интерпретатором (дата обращения: 11.12.2021).
12. Садовская О.Б. Программирование в среде Delphi .Часть I. Object Pascal. Создание консольных приложений [Электронный ресурс]. – URL: https://nenuda.ru/программирование-в-среде-delphi-часть-i-object-pascal-созд.html (дата обращения: 12.12.2021).
13. Microsoft. Краткий обзор языка C# [Электронный ресурс]. – URL: https://docs.microsoft.com/ru-ru/dotnet/csharp/tour-of-csharp/ (дата обращения: 12.12.2021).
14. Знания. Краткий конспект на тему многоугольники [Электронный ресурс]. – URL: https://znanija.com/task/44215129 (дата обращения: 13.12.2021).
15.Академик.ру. [Электронный ресурс]. – URL: https://dic.academic.ru/dic.nsf/ruwiki/994412https://dic.academic.ru/dic.nsf/ruwiki/1652287 (дата обращения: 13.12.2021).
16. Проектирование ис на основе объектно-ориентированного подхода [Электронный ресурс]. – URL: http://inftis.narod.ru/pis/pis-p4-4.htm (дата обращения: 14.12.2021).
17. StudFiles. Понятие объекта в объектно-ориентированном программировании [Электронный ресурс]. – URL: https://studfile.net/preview/1478437/page:9/ (дата обращения: 15.12.2021).
Скачано с www.znanio.ru
© ООО «Знанио»
С вами с 2009 года.