Розробка класу в PHP

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Федеральне агентство з освіти РФ
Державна освітня установа вищої професійної освіти
«Волгоградський державний університет»
Факультет математики та інформаційних технологій
Кафедра комп'ютерних наук та експериментальної математики
Курсова робота
СТВОРЕННЯ КЛАСУ У PHP
Виконав:
студент 1 курсу
Пшеничний Сергій Васильович
Науковий керівник
д.ф.-м.н, завідувач кафедри КНЕМ
Клячин Володимир Олександрович
Волгоград 2008

Зміст
Введення
Глава 1 - Основні поняття об'єктно-орієнтованого програмування в PHP
1.1 Порівняння структурного та об'єктно-орієнтованого підходів до програмування
1.2 Клас як абстрактний тип
1.3 Конструктори і деструктори
1.4 Об'єкти
Глава 2 - Реалізація класу
2.1 Функція l_visited_style (зміна стилю відвіданих посилань)
2.2 Функція l_hover_style (зміна стилю посилань при наведенні)
2.3 Функція l_link_style (зміна стилю не відвіданих посилань)
2.4 Функція add_item (додає елемент в масив)
2.5 Функція add_img_item (додає посилання-малюнок у масив)
2.6 Функція gor_nav_create (створює горизонтальне меню навігації з масиву)
2.7 Функція vert_nav_create (створює вертикальне меню навігації з масиву)
2.8 Функція title_create () (створює заголовок сторінки)
2.9 Приклад використання
Висновок
Список літератури

Введення
Мова PHP був створений восени 1994 року, програмістом Расмусом Лердорфом. Лердорф збирався написати простий «движок» для своєї персональної сторінки і завершив цю роботу до початку 1995 року. Движок був написаний на мові Perl і вмів робити дуже небагато, тому що створювався тільки для підрахунку кількості відвідувачів сторінки Расмуса. Цей двигун був названий Personal Home Page Tools (PHPT), і єдиною його можливістю був підрахунок відвідувачів.
Варто зауважити, що в 1994 році ніяких інструментів для створення різних програм для Web ще не було, та й сам Web тільки ще починався. Тому ті завдання, які вирішувала програма Расмуса, були актуальні для дуже багатьох користувачів мережі, і до нього хлинув потік листів з проханнями надати свій інструментарій. До кінця 1997 року два програмісти Зів Сураські і Енді Гутманс переписали початковий лексичний аналізатор, і до літа 1998 року в повній мірі побачила світ третя версія мови - PHP 3. Розвиток PHP стрімко тривало, в мову сотнями додавалися нові функції, і в 1999 році число розробників, які використовують PHP, перевищило 1 мільйон, що зробило PHP одним з найбільш популярних мов для розробки Web - додатків. До цього часу до розробки мови підключилося велика кількість програмістів зі всього світу.
На даний момент використовується п'ята версія мови PHP. Дана мова набирає все більшої популярності, адже його можливості практично не обмежені. Проте, ще більшої його популяризації заважає той факт, що далеко не всі користувачі які вирішили створити свій сайт або сторінку вміють програмувати на досить високому рівні. Саме цю проблему частково ми і спробуємо вирішити. Метою даної роботи є створення класу, що полегшує програмісту створення меню навігації.

Глава 1 - Основні поняття об'єктно-орієнтованого програмування в PHP5
Перехід від структурного програмування до об'єктно-орієнтованого пов'язаний, в першу чергу, із зростаючою складністю створюваного програмного забезпечення. У перший час програми не перевищували декількох сотень рядків. Збільшення кількості коду в програмах до декількох тисяч рядків призвело до впровадження прийомів структурного програмування (з'явилися функції), що дозволило створювати та супроводжувати програми розмірами до ста тисяч рядків. Стрімкий розвиток програмного забезпечення зажадало створення та супроводу ще більшого обсягу коду. Відповіддю на це було створення об'єктно-орієнтованої технології. Застосування даної технології дає можливість створювати ще більші за обсягом програми і дозволяє програмісту оперувати при створенні коду об'єктами реального світу, а не архітектурою комп'ютера.
Об'єктно-орієнтований підхід за останні два десятиліття набув широкого поширення. Він використовується в багатьох мовах програмування, в тому числі і в PHP 5.
1.1 Порівняння структурного та об'єктно-орієнтованого підходів до програмування
Всі мови програмування побудовані на абстракції. Перші асемблери були абстракціями машинних кодів, програмування на яких вимагало детального знання архітектури комп'ютера. Введення асемблера дозволило не запам'ятовувати величезного числа кодів процесора і правил їх застосування. У свою чергу мови високого рівня, що з'явилися слідом за асемблером, були абстракцією асемблера. Поява структурного підходу до програмування характеризується в першу чергу застосуванням функцій, коли частина коду можна оформити у вигляді функції і використовувати його кілька разів у різних місцях програми. Такий прийом дозволяє не тільки повторно використовувати код, але й налагоджувати його невеликими блоками, які відповідають конкретним завданням.
Об'єктно-орієнтований підхід моделює не окремі процеси, а об'єкти реального світу і їх поведінку. Програма може адаптуватися до ускладнення реального світу, створюючи нові типи об'єктів. Таким чином, об'єктно-орієнтований підхід дозволяє описати завдання в її термінах, а не термінах комп'ютера.
Свідомість людини оперує поняттями, які є абстракціями окремих предметів. Поняттю «стіл» задовольняють всі столи світу. Якщо уточнити поняття: «сірий стіл», то дане поняття виключає з розгляду всі столи, колір яких відмінний від сірого. Більш уточнене поняття «сірий стіл з висувними ящиками» ще більше звужує кількість столів задовольняють цим визначенням. Характеризуючи об'єкт «стіл» все більшим числом параметрів, від абстрактного поняття можна прийти до цілком конкретного предмета.
Такий підхід взяли на озброєння творці об'єктно-орієнтованої технології. В основі цієї технології лежить конструкція, звана класом, що грає роль «поняття». Клас складається з перемінних, які називаються членами класу, які містять в собі різні характеристики нашого поняття. У предметів можуть бути як легко помітні характеристики, так і приховані. Так, при роботі з телевізором ми можемо скористатися пультом управління для зміни контрастності і яскравості зображення, гучності звуку, а різні мікросхеми та інші деталі пристрою телевізора приховані від нас корпусом і не доступні в повсякденному зверненні. Точно так само і члени класу можуть бути відкритими та закритими.
Крім статичних характеристик, у об'єктів є так само характеристики, пов'язані з їх поведінкою чи діями, що здійснюються над ними. Такі динамічні характеристики об'єкта моделюються в класі окремими функціями, званими методами класу.
Таким чином, класи - це конструкції, що моделюють наші поняття. Клас застосовують як розширений тип змінної. Тільки при оголошенні такий «змінної» ми отримуємо не звичайну змінну, а модель об'єкта, яку далі будемо називати просто об'єктом. При цьому об'єкт розділений на дві частини: закриту, яка доступна тільки функцій всередині об'єкта, і відкриту, яку можна викликати для цього об'єкта з тексту основної програми.
Уточнення класу (поняття) відбуваються за допомогою спеціального механізму, названого спадкуванням. При оголошенні класу можна дізнатися, що новий клас успадковує від вже існуючого.
Крім спадкування, існує інший тип відносин, званий агрегацією. Класи можуть в якості членів містити інші об'єкти. Якщо клас «водний транспорт» може бути базовим для підводного човна, крейсера, лайнера, то в свою чергу будь-який з кораблів може містити такі об'єкти, як палуба, двигун, навігаційне обладнання і т.д. Причому кількість і вид об'єктів, що містяться в класі, не обмежена.
1.2 Клас як абстрактний тип
Клас це конструкція, що задає зразок, по якому буде побудований об'єкт. Образно кажучи, можна представити його як форму, за допомогою якої відливають деталі на металургійних виробництвах. Одного разу розробивши таку форму з потрібними геометричними параметрами, можна відлив з неї будь-яку кількість деталей, які будуть точними копіями один одного і цієї форми. Точно так само в програмі, один раз написавши клас, можна потім створювати будь-яку кількість об'єктів цього класу, які будуть містити всі змінні і методи, які є у їх класу.
Оголошення класу здійснюється за допомогою ключового слова class, за яким слідують назва класу та компоненти класу в фігурних дужках.
Об'єкт класу оголошується за допомогою ключового слова new, за яким слідує назва класу. Як тільки об'єкт класу оголошено, з'являється можливість звертатися до його компонентів за допомогою уточненого імені, яке включає ім'я об'єкта, наступну за ним стрілку (->) і ім'я методу і члена класу.
Методи і члени класу можуть викликатися не тільки з зовнішньої програми, але і з самого класу. Для того щоб звернутися до змінної чи способу класу всередині класу, це звернення необхідно попередити конструкцією $ this->. Змінна $ this, яка неявно присутня в кожному класі, є посиланням на поточний об'єкт класу і повідомляє інтерпретатору PHP, що ви звертаєтеся до змінної даного класу, а не створюєте нову. Членам класу можна присвоювати значення, як звичайним змінним програми.
1.3 Конструктори і деструктори
Серед методів класу розрізняють два особливих методу: конструктор і деструктор. Конструктор - це спеціальний метод класу, призначений для ініціалізації членів класу. Цей метод виконується раніше всіх інших методів класу під час декларування об'єкта. У конструкторі зазвичай здійснюють ініціалізацію членів класу і резервування ресурсів, необхідних для роботи об'єкта, - виконується відкриття файлів, з'єднання з базою даних і т.д. Для того щоб використовувати в класі конструктор, необхідно оголосити в ньому метод з ім'ям _construct ().
Деструкція - це спеціальний метод класу, призначений для звільнення ресурсів, зайнятих об'єктом під час його існування. Цей метод завжди викликається після всіх інших методів під час знищення об'єкта. У ньому можна закрити відкриті файли, від'єднатися від бази даних.
Конструктор і деструктор - це ключові методи класу. Їх наявність є однією з ознак об'єктно-орієнтованої технології. Але це не означає, що в кожному класі обов'язково повинні бути констуктор і деструктор - це необов'язкові елементи класу і їх слід застосовувати тільки при необхідності.
1.4 Об'єкти
Об'єкти оголошуються за допомогою ключового слова new і є екземпляром класу. Можна оголосити кілька об'єктів (примірників) класу, точно так само як одному поняттю столу може відповідати кілька реальних столів, а з однієї ливарної форми можна отримати багато деталей.
Об'єкти є такими ж повноцінними змінними. Можна створювати масив об'єктів, але при роботі з ним необхідно враховувати особливості оголошення та оперування об'єктами.
Об'єкти, як і звичайні змінні, можна передавати в якості аргументу функції. Вони можуть виступати не тільки як параметри функцій, але і як повернені значення. Повертається об'єкт можна присвоїти іншому об'єкту або викликати його методи або члени безпосередньо.

Глава 2 - Реалізація класу
Створюваний нами клас буде називатися Url_nav представляти собою масив і змінну:
$ Link_and_text_list - масив посилань, в якому будуть зберігатися адреси посилань і текст до них.
$ Delitmer - роздільник посилань.
Для успішної роботи класу нам знадобляться три методи:
функція, що змінює стиль відвіданих посилань
функція, що змінює стиль посилань при наведенні курсору миші
функція, що змінює стиль не відвіданих посилань
функція, яка буде додавати звичайне посилання елемент в масив
функція, яка буде додавати посилання-малюнок у масив
функція, що створює горизонтальне меню навігації з масиву
функція, що створює вертикальне меню навігації з масиву
функція створює заголовок
Опишемо кожен метод класу більш докладно.
2.1 Функція l_visited_style (зміна стилю відвіданих посилань)
При виконанні функції користувачу треба буде ввести чотири параметри:
$ Color - колір посилань
$ T_decor - оформлення посилань (наприклад підкреслення)
$ F_size - розмір шрифту посилань
$ F_font - назва шрифту посилань
Реалізація функції на мові PHP буде мати наступний вигляд:
function l_visited_style ($ color, $ t_decor, $ f_size, $ f_font)
{
echo ('<STYLE type="text/css"> A: visited');
echo ("{");
if ($ color !="")
{
echo ("color:");
echo ($ color);
echo (";");
}
else
{
echo ('color: # 5f0000;');
}
if ($ t_decor !="")
{
echo ('text-decoration:');
echo ($ t_decor);
echo (';');
}
else
{
echo ('text-decoration: none;');
}
if ($ f_size !="")
{
echo ('font-size:');
echo ($ f_size);
echo ('pt;');
}
else
{
echo ('font-size: 12pt;');
}
if ($ f_font !="")
{
echo ('font-family:');
echo ($ f_font);
echo (';}');
}
else
{
echo ('font-family: Arial;');
}
echo ("}</ STYLE> ");
}
2.2 Функція l_hover_style (зміна стилю посилань при наведенні)
При виконанні функції користувачу треба буде ввести чотири параметри:
$ Color - колір посилань
$ T_decor - оформлення посилань (наприклад підкреслення)
$ F_size - розмір шрифту посилань
$ F_font - назва шрифту посилань
Реалізація функції на мові PHP буде мати наступний вигляд:
function l_hover_style ($ color, $ t_decor, $ f_size, $ f_font)
{
echo ('<STYLE type="text/css"> A: hover');
echo ("{");
if ($ color !="")
{
echo ("color:");
echo ($ color);
echo (";");
}
else
{
echo ('color: # 000000;');
}
if ($ t_decor !="")
{
echo ('text-decoration:');
echo ($ t_decor);
echo (';');
}
else
{
echo ('text-decoration: blink, underline;');
}
if ($ f_size !="")
{
echo ('font-size:');
echo ($ f_size);
echo ('pt;');
}
else
{
echo ('font-size: 12pt;');
}
if ($ f_font !="")
{
echo ('font-family:');
echo ($ f_font);
echo (';}');
}
else
{
echo ('font-family: Arial;');
}
echo ("}</ STYLE> ");
}
2.3 Функція l_link_style (зміна стилю не відвіданих посилань)
При виконанні функції користувачу треба буде ввести чотири параметри:
$ Color - колір посилань
$ T_decor - оформлення посилань (наприклад підкреслення)
$ F_size - розмір шрифту посилань
$ F_font - назва шрифту посилань
Реалізація функції на мові PHP буде мати наступний вигляд:
function l_link_style ($ color, $ t_decor, $ f_size, $ f_font)
{
echo ('<STYLE type="text/css"> A: link');
echo ("{");
if ($ color !="")
{
echo ("color:");
echo ($ color);
echo (";");
}
else
{
echo ('color: # 5f0000;');
}
if ($ t_decor !="")
{
echo ('text-decoration:');
echo ($ t_decor);
echo (';');
}
else
{
echo ('text-decoration: none;');
}
if ($ f_size !="")
{
echo ('font-size:');
echo ($ f_size);
echo ('pt;');
}
else
{
echo ('font-size: 12pt;');
}
if ($ f_font !="")
{
echo ('font-family:');
echo ($ f_font);
echo (';}');
}
else
{
echo ('font-family: Arial;');
}
echo ("}</ STYLE> ");
}
2.4 Функція add_item (додає елемент в масив)
При виклику даної функції користувачу треба буде ввести два параметри:
$ Title - відображуваний текст посилання
$ S_url - адреса, на який вказує посилання
Таким чином, всю функцію можна описати такою послідовністю дій:
визначення кінця масиву
додавання в масив змінної $ title
додавання в масив змінної $ s_url
Після перекладу алгоритму на мову PHP отримаємо таку функцію:
function add_item ($ title, $ s_url)
{
$ N = sizeof ($ this-> link_and_text_list);
$ This-> link_and_text_list [$ n] ['title'] = trim ($ title);
$ This-> link_and_text_list [$ n] ['url'] = trim ($ s_url);
}
2.5 Функція add_img_item (додає посилання-малюнок у масив)
При виклику даної функції користувачу треба буде ввести три параметри:
$ Title - альтернативний текст
$ S_url - адреса, на який вказує посилання
$ Image - шлях до рисун
Таким чином, всю функцію можна описати такою послідовністю дій:
визначення кінця масиву
додавання в масив тега IMG за допомогою до малюнка заданим змінної $ image і альтернативним текстом з змінної $ title
додавання в масив змінної $ s_url
Після перекладу алгоритму на мову PHP отримаємо таку функцію:
function add_img_item ($ title, $ s_url, $ image)
{
$ N = sizeof ($ this-> link_and_text_list);
if ($ image !="")
{
$ This-> link_and_text_list [$ n] ['title']="< IMG SRC = ". Trim ($ image)." BORDER = 0 ALT =' ". Trim ($ title )."'>";
}
$ This-> link_and_text_list [$ n] ['url'].=" ". Trim ($ s_url);
}
2.6 Функція gor_nav_create (створює горизонтальне меню навігації з масиву)
Функція повинна послідовно виводити всі посилання, введені раніше в масив $ link_and_text_list, через роздільник заданий у змінній $ delitmer.
Реалізація функції на мові PHP буде мати наступний вигляд:
function gor_nav_create ()
{
$ Links_arr = $ this-> link_and_text_list;
$ Str = "";
$ C = sizeof ($ links_arr);
for ($ i = 0; $ i <$ c; $ i + +)
{
if (! $ links_arr [$ i] ['url'])
{
$ Str .= $ links_arr [$ i] ['title'];
} Else {
$ Str .= "<a \"".$links_arr[$i]['url']."\" target=\"_self\">". $ Links_arr [$ i] ['title']."< / a> ";
}
if ($ i <$ c-1)
{
$ Str .= $ this-> delitmer;
}
}
return $ str;
}
2.7 Функція vert_nav_create (створює вертикальне меню навігації з масиву)
Функція повинна послідовно виводити всі посилання, введені раніше в масив $ link_and_text_list з переходом на наступну рядків
Реалізація функції на мові PHP буде мати наступний вигляд:
function vert_nav_create ()
{
$ Links_arr = $ this-> link_and_text_list;
$ Str = "";
$ C = sizeof ($ links_arr);
for ($ i = 0; $ i <$ c; $ i + +)
{
if (! $ links_arr [$ i] ['url'])
{
$ Str .= $ links_arr [$ i] ['title'];
} Else {
$ Str .= "<a \"".$links_arr[$i]['url']."\" target=\"_self\">". $ Links_arr [$ i] ['title']."< / a >"."< BR> ";
}
}
return $ str;
}
2.8 Функція title_create () (створює заголовок сторінки)
Дана функція буде виводити в заголовок сторінки частина масиву, що містить текст з посилань (через роздільник).
Реалізація функції на мові PHP буде мати наступний вигляд:
function title_create ()
{
$ Links_arr = array_reverse ($ this-> link_and_text_list);
$ Str = "";
$ C = sizeof ($ links_arr);
for ($ i = 0; $ i <$ c; $ i + +)
{
$ Str .= $ links_arr [$ i] ['title'];
if ($ i <$ c-1)
{
$ Str .= $ this-> delitmer;
}
}
return "<title>". $ str. "</ title>";
}
}
2.9 Приклад використання
Для того щоб проілюструвати використання створеного нами класу введемо наступний код PHP (результат його виконання показаний на Рис. 1):
<! DOCTYPE HTML PUBLIC "- / / W3C / / DTD HTML 3.2 Final / / EN">
<HTML>
<HEAD>
<TITLE> ReFolder - Про проект </ TITLE>
</ HEAD>
<BODY Bgcolor="#FFFFFF" text="#000000">
<TABLE BORDER=0 WIDTH=100% HEIGHT=100%>
<TR>
<TD WIDTH=300 HEIGHT=90 ALIGN = "center" VALIGN = "middle"> <IMG SRC = "Logo.jpg"> </ TD>
<TD ALIGN = "center" VALIGN="bottom">
<? Php
$ Nav = new Url_nav (); / / створення нового екземпляра класу
$ Nav -> l_visited_style ("","","","");// зміна стилю відвіданих посилань
$ Nav -> l_hover_style ("","","","");// зміна стилю посилань при наведенні
$ Nav -> l_link_style ("","","","");// зміна стилю невідвіданих посилань
$ Nav -> delitmer = "<"; / / встановлення роздільника
$ Nav -> add_item ("Про проект", "index.htm");
$ Nav -> add_item ("Реферати", "referats.htm"); / / додавання елементів
$ Nav -> add_item ("Бібліотека", "bibl.htm");
$ Nav -> add_item ("Рішення та відповіді", "otveti.htm");
$ Nav -> add_item ("Програми", "program.htm");
$ Nav -> delitmer = ">"; / / зміна роздільника
echo $ nav -> gor_nav_create (); / / створення і виведення панелі навігації з посиланнями
echo ("</ TD>
</ TR>
<TR>
<TD WIDTH=300 VALIGN='top' ALIGN ='left'>
<IMG SRC ='MenuLine.jpg'> <BR> ");
$ Nav2 = new Url_nav ();
$ Nav2 = new Url_nav (); / / створення нового екземпляра класу
$ Nav2 -> l_visited_style ("","","","");// зміна стилю відвіданих посилань
$ Nav2 -> l_hover_style ("","","","");// зміна стилю посилань при наведенні
$ Nav2 -> l_link_style ("","","","");// зміна стилю невідвіданих посилань
$ Nav2 -> add_item ("Безкоштовне зберігання файлів", "http://refolder.ifolder.ru");
$ Nav2 -> add_item ("Замовити роботу", "work.htm"); / / додавання елементів
$ Nav2 -> add_item ("Лист розробникам", "opinion.htm");
$ Nav2 -> add_item ("Карта сайту", "karta.htm");
$ Nav2 -> add_img_item ("Розділювач", "MenuLine.jpg", "MenuLine.jpg");
echo $ nav2 -> vert_nav_create ();
?>
</ TD>
<TD ALIGN = "left" VALIGN="top"> <P> Доброго часу доби, Дорогий гість. <BR>
На цьому сайті ви зможете знайти велику колекцію книг, рефератів, а так само виконаних робіт з різних предметів. <BR>
Так само тут зберігається база відповідей на деякі курси Intuit.ru <BR>
Тепер трохи про те як працює сайт. На сайті зберігаються два типи посилань:
<OL>
<LI> Посилання з позначкою [iFolder] - вказують на файли зберігаються на сайті файлового хостингу <A HREF="http://refolder.ifolder.ru/"> refolder.ifolder.ru </ A>
(Чому саме він? Перш за все тому що він один з небагатьох серверів підтримують програми для закачування, що на наш погляд вкрай зручно) </ LI>
<LI> Посилання з позначкою [ed2k] - вказують на версію файлу зберігається в мережі eDonkey2000. Щоб завантажити подібні посилання рекомендуємо встановити програму
eMule (яку можна <A HREF="http://www.emule-project.net/"> завантажити з офіційного сайту </ A> або скористатися ось цієї <A HREF = "http://refolder.ifolder.ru/ 6437769 "> посиланням [iFolder] </ A>). Про те як користуватися програмою eMule можна прочитати <A HREF="rukovodstvo_eMule.zip"> тут. </ A>
</ LI>
</ OL>
</ P>
<b> PS Всі матеріали розміщені на даному сайті носять виключно ознайомчий характер і повинні бути видалені після перегляду. </ b>
</ TD>
</ TR>
<TR>
<TD>
</ TD> <TD ALIGN = "center">
</ TD>
</ TR>
</ TABLE>
</ BODY>
</ HTML>

Рис. 1 - Результат виконання коду

Висновок
Розроблений клас дозволяє значно спростити створення меню навігації сайту. Він зводить усю розробку до завдання елементів масиву, роздільник і викликом методів класу.
Клас дозволяє виводити меню навігації, як у вигляді рядка, так і у вигляді стовпця. Що ще більше розширює функціональні можливості класу.
Таким чином можна зробити висновок про те, що поставлене завдання було виконано повністю. І її підсумком став цілком життєздатний програмний продукт, здатний отримати широке застосування у фахівців займаються розробкою Web - сайтів на мові PHP.

Список літератури
Кузнецов М. В., Сімдянов І.В. Самовчитель PHP. - 2-е вид., Перераб. і доп. - СПб.: БХВ-Петербург, 2006.
Уільман Л., Основи програмування на PHP: Пер з анг. -М.: ДМК Пресс, 2001.
Флен М.Є., PHP Очима хакера. - СПб.: БХВ-Петербург, 2005.
Кухарчик А., PHP: Навчання на прикладах. - Мн.: Нове видання, 2004.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
43.9кб. | скачати


Схожі роботи:
Розробка власного класу STRING
Розробка комунікативного класу для дистанційного навчання
Розробка та проектування ресторану першого класу на 70 посадкових місць у м Сальське
Сесії в PHP
Вступний курс в PHP
Прийоми безпечного програмування веб-додатків на PHP
Характеристика класу Земноводні
Роль середнього класу
Шпора за конспектами 11-го класу
© Усі права захищені
написати до нас