Сравнение языков программирования (esyr) (Сравнение языков программирования), страница 10
Описание файла
Файл "Сравнение языков программирования (esyr)" внутри архива находится в папке "Сравнение языков программирования". PDF-файл из архива "Сравнение языков программирования", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 10 страницы из PDF
Известно, что сопрограммы выполняются квазипараллельно. Следовательно, их использование исключает трудную проблему взаимодействия истиннопараллельных процессов.2. Переключение процессора от одной сопрограммы к другой осщ ествляется явным оператором передачи управления. Выполнение сопрограммы, которойпередаётся управление, возобновляется с той точки, где она была приостановлена последним таким оператором.Примеры кода[править]Примеры кода на Java[править]package MyPackage; // Всё, что будет написано в этом файле, считается лежащим в этом пакете.import java.lang.*; // Импорт пакетов.public class MyClass{private static int m_i = 3;private static int m_j;static {// Демонстрация статического блока в Java.
Операторы в этом блоке будут выполнены в самом начале программы.m_j = m_i * 4;}public static void main(String[] args){final int N = 5; // final — аналог констант в языках C/C++final int M = 3;double a[][] = new double[N][M];double [][]b = new double[N][M];for (int i = 0; i < a.length; ++i) {for (int j = 0; j < a[i].length; ++j) {a[i][j] = i * j;}}for (int i = 0; i < b.length; ++i) {for (int j = 0; j < b[i].length; ++j) {b[i][j] = i + j;}}double res[][] = sumMatrices(a, b);for (int i = 0; res != null && i < res.length; ++i) {for (int j = 0; res[i] != null && j < res[i].length; ++j) {System.out.print(res[i][j] + " ");}System.out.println();}}public static double[][] sumMatrices(double a[][], double b[][]){label1: if (a != null && b != null && a.length == b.length) {label2: {for (double x[] : a) { // аналог for-eachfor (double y[] : b) {if (x.length != y.length) {break label2; // прервать внешний цикл}}open in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.com}}break label1;}}}System.out.println("Bad Arrays...");return null;} else {System.out.println("Bad Arrays...");return null;}double [][]res = new double[a.length][a[0].length];for (int i = 0; i < a.length; ++i) {for (int j = 0; j < a[i].length; ++j) {res[i][j] = a[i][j] + b[i][j];}}return res;package MyPackage;import java.sql.SQLException;public class Example{public static void main(String [] argv){// демонстрация работы внутренних классов:Outer outer = new Outer(10);outer.test();// демонстрация работы динамической диспетчеризации методов:A refA;refA = new A(5);refA.callMe();refA = new B(10, 15);refA.callMe();// демонстрация работы с абстрактными классами:}}//AbstrA abstra = new AbstrA(5); — нельзя, т.к.
AbstrA — абстрактный класс.AbstrA refAbstrA;refAbstrA = new AbstrB(5, 10);refAbstrA.callMe();// демонстрация работы с интерфейсами:Client client = new Client();client.someFunc();// демонстрация работы с исключениями:try {client.badFuncEx();// Мы не можем оставить потенциальную посылку функцией исключения без внимания:// либо окружим её вызов конструкцией try-catch,// либо напишем, что эта функция тоже может бросать исключения (большое отличие от языка С++).} catch (Exception ex) { // Ловушка для всех исключений, ибо Exception — это базовый класс.//do Smth...}class Outer{private int x = 0;public Outer(int x){this.x = x;}private void display(){System.out.println(x);}public void test(){Inner in = new Inner();in.useOuterFunc();open in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.com}in.useOuterFunc();}class Inner{public void useOuterFunc(){// Внутренний класс имеет непосредственный доступ к приватным и публичным полям внешнего класса.// Обратное неверно.display();x = 15;display();}}// Реализация динамической диспетчеризации методов:class A{private int i;A(int i){this.i = i;}public void callMe(){System.out.println("In A.callMe().
" + i);}}final class B extends A// final означает, что никакой класс не сможет отнаследоваться от В.// final, стоящий перед описанием метода запрещает его переопределение.{private int i; // Поле i класса B перекрывает поле i суперкласса.B(int i, int j){super(i); // вызывается метод А(int i) суперкласса.this.i = j;}public void callMe()// Сигнатура функций должна совпадать. В противном же случае — это обычная перегрузка.// Сам метод называется переопределённым (аналог виртуальным методам в С++).{System.out.println("In B.callMe(). " + i); // Здесь выведется значение поля подкласса.// Для доcтупа к полю суперкласа нужно использовать super.i (но здесь поле недоступно, ибо private).}}// Использование абстрактных классов. Если мы объявляем какой-то метод в классе абстрактным, то// автоматически должны сделать абстрактным и сам класс.
С точки зрения динамической диспетчеризации это означает лишь то,// что подклассы должны будут явно реализовать все абстрактные методы или тоже быть абстрактными.abstract class AbstrA{private int i;AbstrA(int i){this.i = i;}abstract public void callMe();}final class AbstrB extends AbstrA{private int i;AbstrB(int i, int j){super(i);this.i = j;}public void callMe(){System.out.println("In AbstrB.callMe().
" + i);}protected void finalize()open in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.com}protected void finalize(){// Считаю нужным упомянуть о методе finalize. Он должен вызываться при удалении объекта сборщиком мусора.// Используется для освобождения занятых ресурсов (закрытия файлов и т.п.).// Однако его поведение настолько туманно, что применять его не стоит, а позаботиться об освобождении отдельно. :)System.out.println("Wow! You're lucky to see it in your console! :D");}// Использование интерфейсов и исключений.
:)// Все методы и члены интерфейсов по умолчанию делаются публичными. Все члены — final static.interface MyInterface{int pubStatFinalMember = 121;// Все переменные должны быть инициализированы.void someFunc();}/*Доступ class имя_класса [extends суперкласс][implements интерфейс [, интерфейс...]]//тело класса*/class Client implements MyInterface// В классе должны быть определены все функции интерфейса. Спецификатор доступа у них обязан быть public.// Если в классе определяются не все функции интерфейса, то он должен быть объявлен абстрактным.// Кроме того интерфейс может быть вложен в класс или же другой интерфейс, а также интерфейсы можно наследовать.{public void someFunc(){//pubStatFinalMember = 601; ——— Нельзя, т.к.
переменная — final.}System.out.println("In someFunc() from interface.");}public void badFuncEx() throws SQLException{//Здесь же и рассмотрим исключения. :)try {int i = 0;i = pubStatFinalMember / i;System.out.println("You shouldn't see it.");} catch (ArithmeticException ex) { // Тут мы поймаем исключение деления на нульSystem.out.println(ex);throw new SQLException();// Пошлём другое исключение выше. >:D Но в таком случае мы должны у функции пометить, что она может// разбрасываться исключениями (см. throws список_исключений).} finally {// Этот блок кода обязательно получит управление после блока try/catch вне зависимости от исключения.System.out.println("You will always see it.");}}Вывод:1015In A.callMe().
5In B.callMe(). 15In AbstrB.callMe(). 10In someFunc() from interface.java.lang.ArithmeticException: / by zeroYou will always see it.Пример кода на Delphi[править]Описание юнита, наследования и конструкторовunit Unit1;interfaceopen in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.comusesForms, Dialogs, Classes, Controls, StdCtrls;type// Определение родительского класса основанного, по умолчанию, на TObjectTFruit = classpublicname: string;Constructor Create; overload;// Этот конструктор использует умолчанияConstructor Create(name : string); overload;end;// Определение типа потомкаTApple = class(TFruit)publicdiameter : Integer;publishedConstructor Create(name : string; diameter : Integer);end;// Класс формы используемой этим модулемTForm1 = class(TForm)procedure FormCreate(Sender: TObject);end;varForm1: TForm1;implementation{$R *.dfm} // Вложение определений формы// Создание объекта fruit - версия без параметровconstructor TFruit.Create;begin// Сначала выполняется родительский конструктор (TObject)inherited; // Вызов родительского метода Create// Теперь устанавливаем имя fruit, по умолчаниюself.name := 'Fruit';end;// Создание объекта fruit - версия с параметрамиconstructor TFruit.Create(name: string);begin// Не cможет выполниться родительский конструктор - параметры отличаются// И сохраняем имя fruitself.name := name;end;// Создание объекта appleconstructor TApple.Create(name: string; diameter : Integer);begin// Сначала выполняется родительский конструктор (TFruit)inherited Create(name); // Вызов родительского метода// Теперь сохраняем переданный apple диаметрself.diameter := diameter;end;// Основная линия кодаprocedure TForm1.FormCreate(Sender: TObject);varfruit : TFruit;banana : TFruit;apple : TApple;begin// Создание 3-х различных объектов fruitfruit := TFruit.Create;banana := TFruit.Create('Banana');apple := TApple.Create('Pink Lady', 12);// Смотрим какие из наших объектов являются fruitopen in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.com//ififif//ifififend;end.Смотрим какие изfruit Is TFruitbanana Is TFruitapple Is TFruitнаших объектов являются fruitthen ShowMessage(fruit.name +' - fruit');then ShowMessage(banana.name +' - fruit');then ShowMessage(apple.name +' - fruit');Смотрим какие объектыfruit Is TApple thenbanana Is TApple thenapple Is TApple thenявляются appleShowMessage(fruit.nameShowMessage(banana.nameShowMessage(apple.name+' - apple');+' - apple');+' - apple');Fruit - fruitBanana - fruitPink Lady - fruitPink Lady - appleПримеры на C++, Ада и Java с использованием шаблонов[править]Стек:GENERICTYPE T IS PRIVATE; SIZE : INTEGER;PACKAGE Stacks ISTYPE Stack IS LIMITED PRIVATE;PROCEDURE Push(S: IN OUT Stack; X : IN T);PROCEDURE Pop(S: IN OUT Stack; X : OUT T);FUNCTION IsEmpty(S : IN Stack) RETURN BOOLEAN;FUNCTION IsFull(S : IN Stack) RETURN BOOLEAN;PRIVATETYPE Stack is RECORDBody : ARRAY (1..SIZE) OF T;Top : INTEGER := 1;END RECORD;END Stacks;template <typename T, int size> class Stack{public:Stack() {top = 0;}void Push(T x);T Pop(T& x);bool IsEmpty();bool IsFull();private:Stack (const Stack& s);T body[N];int top;};Очередь:generictype T is private;Size : integer;package G_Queue istype Queue is limited private;procedure Enqueue(Q: inout Queue; X:T);procedure Dequeue(Q: inout Queue; X:T);procedure Init(Q: out Queue);procedure Destroy(Q: inout Queue);function IsFull(Q: Queue);function IsEmpty(Q: Queue);–- другие процедуры ...privateopen in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.comprivatetype Queue is recordLeft, Right: integer;body : array(1..Size) of T;end record;end G_Queue;Дек:generictype T is private;package G_Deque istype Deque is limited private;procedure PushRight(Deq: inout Deque; X:T);procedure PushLeft(Deq: inout Deque; X:T);procedure PopRight(Deq: inout Deque; X: out T);procedure PopLeft(Deq: inout Deque; X: out T);procedure Init(Deq: out Deque);procedure Destroy(Deq: inout Deque);function IsFull(Deq: Deque);function IsEmpty(Deq: Deque);–- другие процедуры ...privatetype PLink is access;type Link is record inf : T; next, prev : PLink; end record;type PLink is access Link;type Deque is record Left, Right: PLink; end record;end G_Deque;interface IDeque<T>{void PushLeft(T x);void PushRight(T x);T PopLeft();T PopRight();bool IsFull();bool IsEmpty();// другие функции}Функция перемножения матриц:template <class T> Matrix<T>& MatMult (Matrix<T>& A, Matrix<T>& B);Matrix<float> b,c;// конкретизация функцииMatrix<float> a = MatMult(b,c);generictype T is private;with function “+”(x,y:T) return T (<>);with function “*”(x,y:T) return T (<>);type Matrix is private;function G_MatMult(A,B: Matrix) return Matrix;Примеры кода на С#[править]Пример обработки исключений в C#.class NegativeValueException : Exception{public NegativeValueException(string message) : base(message)open in browser PRO versionAre you a developer? Try out the HTML to PDF APIpdfcrowd.compublic NegativeValueException(string message) : base(message){}}// ...string path = @"c:\users\public\test.txt";var file = new System.IO.StreamReader(path);try{var buffer = file.ReadLine();var time = Int32.Parse(buffer);if ( time < 0){throw new NegativeValueException("Time must be a positive value.");}MyClassInstance.Foo(time);}catch (System.IO.IOException e){Console.WriteLine("Error reading from {0}.