Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основные управляющие структуры – последовательность, ветвление, цикл




Назначение компилятора

Главные блоки компьютера и их назначение

Прикладные пользовательские сетевые сервисы.

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

Прикладной уровень отвечает за доступ приложений в сеть. Задачами этогоуровня является перенос файлов, обмен почтовыми сообщениями и управлениесетью.К числу наиболее распространенных протоколов верхних трех уровней относятся:- FTP (File Transfer Protocol) протокол передачи файлов;- TFTP (Trivial File Transfer Protocol) простейший протокол пересылкифайлов;- X.400 электронная почта;- Telnet работа с удаленным терминалом;- SMTP (Simple Mail Transfer Protocol) простой протокол почтового обмена;- CMIP (Common Management Information Protocol) общий протоколуправления информацией;- SLIP ( Serial Line IP) IP для последовательных линий. Протоколпоследовательной посимвольной передачи данных;- SNMP (Simple Network Management Protocol) простой протокол сетевогоуправления;- FTAM (File Transfer, Access, and Management) протокол передачи,доступа и управления файлами.

 

 

 

Главные блоки компьютера это процессор и память, память хранит всю информацию – имена и значения переменных, обрабатываемые данные, а процессор выполняет те или иные действия по обработке данных, хранящихся в памяти, по требованию пользователя.

 

Компилятор проверяет исходный код на соответствие правилам синтаксиса Java и если ошибок нет он преобразует исходный код в байт-коды, которые может интерпретировать виртуальная машина Java.

 

Последовательность - представляет собой череду действий выполняемых программой, например – нахождение квадратного корня суммы 2 переменных(1действие) и вывод этого значения в окно терминала(2 действие) или же заполнение массива(1 д) и последующее преобразование его элементов в обьект типа String

Ветвление – предоставляет возможность выбора между двумя(или более) линиями выполнения программы, в Java такая возможность представлена операторами if и switch.

При использовании оператора if управление передается блоку кода находящемуся сразу после условия если условие истинно, если условие ложно управление передается блоку кода находящемуся после ключевого слова else(если таковой имеется)

При использовании оператора switch управление программой передается блоку кода идущему после case метки значение которой совпадает с проверяемым выражением, если же совпадений с case метками не найдено выпоняется блок кода идущий после ключевого слова default.

Цикл – предоставляет возможность повторять выполнение каких либо операторов, пока условие выполнения истинно, в Java для этого есть операторы цикла – for / while / dowhile, чтобы цикл имел смысл должно присутствовать выражение модификатор, которое в конечном итоге приводит к ложности условия и таким образом завершает цикл, как вариант для выхода из цикла можно использовать ключевое слово break стоящее за условным оператором, в таком случае при истинности условия цикл завершит работу.

Цикл for – может иметь (но не обязан) в своей записи стартовое значение переменной цикла, условие выполнения цикла, и выражение модификатор, а также само тело цикла.

Цикл while – имеет условие выполнения и тело цикла, и выполняется если условие истинно и до тех пор пока условие не станет ложным.

Цикл do while имеет форму do {операторы} while (условие) и позволяет выполнить тело цикла хотя бы 1 раз перед проверкой условия.

5Свойства класса, его структура.

Класс создает новый тип данных,также может служить основой для создания классов-модификаций и является шаблоном для создания обьектов этого типа.

Класс начинается с его обьевления – ввода идентификатора доступа и его имени,

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

6Методы типа get() & set()

Методы типа void set(Type-class var) используются для того чтобы назначить полям обьекта некоторые значения. В свою очередь методы типа return-type get(search-type var) и return-type get() призваны возвращать как результат своего выполнения значения полей вызвавшего обьекта, для последующего использования в других операторах или для вывода значения в окно терминала.

 

8Этапы жизни обьекта

Этап 1 – создание ссылки типа Класс-обьекта

Этап 2 – распределение памяти для обьекта с помощью операции new и вызова конструктора.

Этап 3 – взаимодействие методов и полей обьекта

Этап 4 – обьект больше не используется – нет ни одной ссылки на него, «сборщик мусора» удаляет обьект из памяти

9Назначение конструктора

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

10 Наследование

Суть наследования в том что некий класс(суперкласс) можно использовать как основу для постороения бесконечного количества его модифицированных версий(подклассов), подкласс в свою очередь может иметь только один суперкласс, отношение наследования в Java указывается ключевым словом class A extends B

11Инициализация полей и переменных

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

12Ссылка на обьект

Ссылку на обьект – это имя по которому программа или программист может обратиться к определенному месту в памяти, ссылка на обьект может иметь тип класса по шаблону которого был создан обьект, или же тип его одного из его суперклассов или же тип реализуемых им интерфейсов.

13Примитивные типы данных

Логический тип данных Boolean, имеет 2 возможных значения – true & false

Символьный тип char – изза использования Unicode имеет ширину в 16 бит, но позволяет использовать любые существующие символы любого языка, переменные типа char хранят символы записанные либо в литеральной форме либо с помощью номера в таблице Unicode.

Типы с плавающей точкой обычной(float) и двойной(double) точности имеют ширину в 32 и 64 бита соответственно и позволяют хранить числа с дробной частью

Целочисленные типы

Byte, short, int, long – позволяют хранить целые числа, имеют ширину 8 16 32 64 бита соответственно

14 Литерал – это константа без имени, литералы бывают примитивных типов(int,long,float,double,char,boolean) и строковые,

15Константы в Java

Это переменные которые не могут изменить свое значение по ходу выполнения программы, поэтому их нужно инициализировать при обявлении. В классах константы задаются в форме final type NAME_ONE = value; в интерфейсах не нужно указывать ключевое слово final, только тип имя и значение.

16Операции для целочисленных типов данных

Арифметические + плюс – минус / делить * умножить %найти остаток от деления

Сравнения == равно?,!= не равно?, > больше?, < меньше?, >= больше либо равно?,

<= меньше либо равно?

Сдвиги – левый сдвиг (<<)– смещает все биты значения на указанное количество разрядов влево, при этом старшие биты которые выходят за пределы значения отсекаются, а справа вводятся 0, правый сдвиг(>>) – сдвигает все биты значения врпаво на указанное количество разрядов, при этом если старший бит был 1 все пустые левые разряды заполнят единицы, с 0 та же история, этот процесс называется – расширение знака; чтобы этого избежать можно использовать беззнаковый сдвиг вправо(>>>)

Побитовые операции - ~ поразрядное дополнение(инвертирует все биты значения) | поразрядное или (если есть хотя бы одна единица то 1) ^ исключающее или (если 1 и 0 то 1) & И (если две 1 то 1)

Также имеются инкремент и декремент ++ и – соответственно увеличить или уменьшить значение на 1

17Операции для булевого типа данных

 

 

18 Операции для сравнения данных

Для булевского типа работают только ==,!=

Для всех остальных примитивных типов работают все

Операция == применима к ссылкам на обьекты(в том числе типа String) но он проверяет не равенство двух обьектов, а ссылаются ли они на один обьект. Если да вернет true если нет false

21Оператор присваивания

Имеет форму var = value|expression; для примитивных типов и

ob-reference = new Class-type()|ob2-reference для обьектов, соответственно применяется он для назначения переменной нового значения или значения выражения или для назначения ссылки на обьект.

22Расширенное присваивание

Для числовых данных

Для булевских

 

25 Оператор выбора switch применяется для передачи управления программой блоку кода идущему за case меткой со значением соответствующим проверяемому значению

Форма оператора:

28 назначение операторов break, continue, return

Оператор break используется для выхода из switch или преждевременного выхода из цикла(также существует расширенная версия break label где label – специальная метка – любой идентификатор после которого стоит: поэтому используя break label можно выйти из множества вложенных циклов и передать управление программой операторам идущим за блоком кода с меткой), оператор continue позволяет начать следующую итерацию цикла не доходя до конца его тела, а прямо с места где он встретился, оператор return позволяет возвращать значения которые вырабатывает метод в процессе работы, заодно явлеется оператором завершающим метод и отдающим управление программой вызвавшему обьекту или классу.

29Массивы

М. – это набор однотипных переменных на которые ссылаются по общему имени, нумерация массива начинается с 0

30Базовый тип массива

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

31 Прием вычисления суммы элементов массива

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

 

32Методика нахождения минимального максимального элемента массива

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

Для нахождения максимального элемента массива сравниваем рассматриваемый элемент массива с переменной max например(которая инициализируется 0 для начала) если она меньше чем элемент массива то присваиваем ей значение элемента массива, если нет то начинается след итерация цикла.

33Приемы инициализации элементов массива

Пример 1 нужно инициализировать 1000 элементов int массива значением 5

Для этого создаем цикл проходящий по всем элементам массива, а в его теле присваиваем рассматриваемому элементу значение 5

Пример 2 нужно заполнить массив рандомными числами от 0 до 100

Прежде создания класса импортируем утилиту java.util.Random;

Затем создаем класс а в нем метод main()

В методе создаем обьект класса Random – Random r = new Random();

Далее создаем цикл проходящий по всем элементам массива и в теле цикла рассматриваемому элементу присваиваем конструкцию = r.nextInt(100);

34Приемы копирования массива

Чтоб скопировать массив желатильно иметь массив той же длины или больше,

Затем создать цикл который будет проходить по массиву который нужно скопировать

В теле цикла значение содержащееся в рассматриваемом элементе копируемого массива присваиваем очередному элементу массива который является копией.

Либо использовать утилиту java.util.Arrays и ее перегруженный метод copyOf()

35Метод пузырьковой сортировки

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

public void sortBubbleUp()

{

for(int i = Array.length; i>1; i--)

{

for(int j = 0;j<i-1;j++)

{

if(Array[j] >Array[j+1])

{

t = Array[j]; Array[j] = Array[j+1]; Array[j+1] = t;

}

}

}

}

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

 

public void sortByA()

{

for(int i = 0; i<Array.length; i++)

{

for(int j = i-1;j>i;j--)

{

if(Array[j] >Array[j-1])

{

t = Array [j]; Array [j] = Array [j-1]; Array[j-1] = t;

}

}

}

}

36Метод сортировки выбором

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

 

Код

static void sortChoiceUp(int [] Array)//static нужно для использования методов не //создавая обьекты

{

int pos=0,max=0;

for(int i = Array.length-1; i>0; i--)

{

max = 0;

for(int j=0; j<i+1; j++)

{

if(Array[j]>max){max = Array[j];pos = j;}

}

Array[pos] = Array[i];

Array[i] = max;

}

}

 

static void sortChoiceDown(int [] Array)

{

int pos=0;

for(int i = Array.length-1; i>0; i--)

{

int min =100;

for(int j=0; j<i+1; j++)

{

if(Array[j]<min){min = Array[j];pos = j;}

}

Array[pos] = Array[i];

Array[i] = min;

}

}

 

37Метод сортировки вставками

38Структура метода

Каждый уважающий себя метод начинается со спецификатора доступа (public,private,protected) далее если мы планируем использовать метод при этом не создавая обьекты должно следовать ключев слово static, после этого выбирается тип возвращаемого методом значения – любой примитивный тип, строки или обьект типа созданного программистом класса, если метод не должен возвращять значения, тип возврата нужно указать как void, после типа указывается непосредственно имя метода, по которму его будут вызывать, в скобках() после имени указывают список параметров, которые должны будут передаваться ему при его вызове. {Существует в Java такая прекрасная вещь как перегрузка методов и конструкторов, которая позволяет множество методов с одинаковым именем но разным списком параметров, соответственно при вызове метода будет вызываться та версия которая подходит по заданным при вызове параметрам}, при этом Если метод не планируется реализовывать в этом классе(тело у него будет отсутствовать) его нужно обьявить как abstract(при этом класс содержащий такой метод тоже дб обьявлен как abstract) и реализовать(придумать его тело) в каждом подклассе данного класса.

Если же тело будет, то оно указывается в фигурных скобках{} тело содержит операторы(обычно для обработки каких то данных), и если имеет возвращающий тип в своем обьявлении, должен иметь оператор return return-type_variable;(обязательно в конце тк return завершает метод и весь код в методе ниже него не будет выполнен)

40Подробнее о параметрах метода и различия между парам. примитивных типов и обьектов.

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

41Немного о спецификаторах доступа

public(общий) если элемент класса модифицирован этим спецификатором то доступ к нему возможен из любой части программы.

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

protected(защищенный) используется только в наследовании

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

42Особенности конструктора как метода класса

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

конструктор не имеет возвращаемого типа(даже void не имеют) тк они лишь заполняю поля обьекта какими-то стартовыми значениями. Также конструкторы напрямую обращаются к полям класса тк именно они и создают обьекты этого класса.

43Статические элементы

К статическим данным и методам можно обращаться без ссылки на обьект и до того как обьекты вообще будут созданы, статическими можно обьявлять как методы так и переменные или даже целые блоки кода, переменные в классе обьявленные как static являются глобальными и используются совместно всеми обьектами класса(если изменить ее в одном обьекте она изменится во всех). Методы обьявленные как статик могут вызывать только другие статик методы, либо через ссылку на обьект, вызывать методы для того самого обьекта. внутри статического элемента нельзя напрямую обратиться к экземплярным переменным(это которые не были обьявлены как static) но можно обратиться к ним, ссылаясь на обьект их содержащий в форме Object_name.variable. Если нужно вывать статик метод из кода вне класса где он содержится, нужно просто указать путь к нему – classname.methodname(); таким же образом мржно обращаться и к статик переменным. classname.variable

45Понятие инкапсуляции

46Полиморфизм на примере суперкласса и нескольких его подклассов.

Рассмотрим полиморфизм на примере суперкласса и его подклассов - суперкласс становится основой для построения обьектов своих подклассов, по сути разные модификации суперкласса будут иметь одни общие для всех подклассов поля и методы унаследованные ими от своего суперкласса, в тоже время каждый из них может иметь уникальную особенность которая будет отличать его от других подклассов. Также хочется отметить такое проявление полиморфизма как динамическая диспетчеризация методов

- как некоторые из вас знают, можно назначать ссылку типа суперкласса на обьекты подкласса. Так вот при таком раскладе, если подкласс переопределяет метод суперкласса(создает метод с таким же названием как в суперклассе), при его вызове для обьекта типа суперкласса будет вызвана версия суперкласса, а для обьекта подкласса – соответственно версия подкласса.

47Ограничения на типы левой и правой частей операторов присваивания(ОП)

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

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

byte + short * int в итоге результат выражения будет int тк он самый широкий. Действителньные типы в приоритете чтобы сохранить дробную часть

поэтому int + long(который шире чем float) + float == float)

Если чувствешь что можешь выйти за границу диапазона используемого типа, лучше использовать контейнер пошире.

но например если сложить byte и short получим как не удивительно не short как вы могли подумать, тк в Java есть волшебная фигня под названием автоматическое расширение типа, (для удобства вычисления, тк byte и short могут легко выйти за рамки своего диапазона – наверное поэтому) одним словом если сложить byte и byte short и short и тп в результате получим int, дабы воспрепятствовать этому и существует ручное приведение типа. вот как должно быть чтобы получить byte

byte b = (byte) b+c;

byte b = b+c//не будет компилироваться тк int шире чем byte и засунуть его напрямую нельзя.

48Динамическое и статическое связывание

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

50Интерфейс и его назначение

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

Класс реализующий интерфейс обьявляется так:

class A implements Interface

 

52 Понятие исключений, типы исключений

Исключение – это аварийное состояние, которое возникает во время выполнения кода. В Java исключение это обьект, который описывает ошибочную ситуацию произошедшую в какойто части кода, когда такая ситуация возникает создается обьект исключения и вбрасывается в метод вызвавший ошибку. Все типы исключений являются подклассами встроенного класса Throwable, непосредственно ниже него находятся два класса – Error(критические ошибки которые обычно не обрабатываются программистом) и Exception(обрабатываемые исключения)

Это всякие примеры исключений

 

 

53Стандартная реакция системы на исключение

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

54Охраняемый участок программы блок try

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

55Обработчик исключений

Обработчиком является блок catch идущий сразу за блоком try он имеет параметр – тип обрабатываемого им исключения, он обработает его так как написано у него в теле, благодаря тому что исключение обрабатывается программа не завершает работу, а управление передается коду идущему сразу после блока try-catch. Можно использовать множественные операторы catch для отловления разных типов исключений в одном блоке try, в таком случае важно соблюдать иерархию, сначала обработчики подклассов а потом суперклассов, тк суперклассы исключений отлавливают и исключения отлавливаемые подклассами, соответственно код подкласса никогда не будет достигнут, и это вызовет ошибку времени компиляции.

56Генерация исключений в проге

Думаю здесь от нас хотят чтоб мы показали что знаем что исключения можно выбрасывать вручную, да да собственные придуманные исключения, дабы видать проверить работу оператора catch, делается это с помощью ключевого слова throw

в форме – throw new Exception()

НУ и не лишним будет знать причины возникновения исключений они были выше в табличке

57Особенности программирования метода, генерирующего(могущего) исключения

Суть в том что если метод может выбрасывать какието исключения, а мы не хотим их обрабатывать прямо в методе, мы можем явно указать что метод может выбрасывать исключения и через запятую указать типы возможных исключений, это необходимо для всех типов искл, КРОМЕ Error, RuntimeException и любых их подклассов.

Метод же который будет вызывать данный метод должен соорудить блок try-catch дабы отловить оные.

 

58Собственные классы исключений

Остальное можно почерпнуть из лекций, или лабораторных




Поделиться с друзьями:


Дата добавления: 2015-01-03; Просмотров: 668; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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