Главная » Просмотр файлов » лекции (2008) (by Kravets)

лекции (2008) (by Kravets) (1160829), страница 15

Файл №1160829 лекции (2008) (by Kravets) (лекции (2008) (by Kravets)) 15 страницалекции (2008) (by Kravets) (1160829) страница 152019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 15)

 Ìîäóëà 2 - DEFINITION, IMPLEMENTATION.  Àäà - ñïåöèôèêàöèÿ ïàêåòà èîïðåäåëåíèå ïàêåòà, ïðè÷åì îíè ìîãóò òðàíñëèðîâàòüñÿ îòäåëüíî.  Ìîäóëà - 2 òàê æå ìîäóëè îïðåäåëåíèÿ è îïèñàíèÿ ìîãóò òðàíñëèðîâàòüñÿîòäåëüíî.Ñ òî÷êè çðåíèÿ ðàçäåëüíîé òðàíñëÿöèè, êîìïèëÿòîðó íåîáõîäèìîçíàòü òîëüêî òó ÷àñòü, êîòîðàÿ îòíîñèòñÿ ê îïðåäåëåíèþ, ïîýòîìó ýòà÷àñòü âûíåñåíà â îòäåëüíóþ ÿçûêîâóþ êîíñòðóêöèþ.Äëÿ òîãî ÷òîáû îòêîìïèëèðîâàòü êëèåíòñêèé ìîäóëü, êîìïèëÿòîðó íåîáõîäèì òîëüêî DEFINITION ìîäóëü ñåðâèñà, êîòîðûé èñïîëüçóåòêëèåíò. Òî åñòü åñëè ïîìåíÿëñÿ ìîäóëü îïðåäåëåíèÿ, òî òðåáóåòñÿ ïåðåêîìïèëèðîâàòü âñå ìîäóëè, êîòîðûå åãî èñïîëüçóþò.Àíàëîãè÷íî ñäåëàíî â è ßÏ Àäà è Delphi.uses Service; Ñ/C++ ðîëü ìîäóëåé îïðåäåëåíèÿ èãðàþò çàãîëîâî÷íûå ôàéëû,íî ïðè íåçíà÷èòåëüíîì èçìåíåíèè îäíîãî çàãîëîâî÷íîãî ôàéëà òðåáóåòñÿ ïåðåòðàíñëèðîâàòü âñå ôàéëû, êîòîðûå èñïîëüçóþò äàííûé çàãîëîâî÷íûé ôàéë.Ïðè ýòîì â Delphi èãðàþò ðîëü òîëüêî ñåðüåçíûå èçìåíåíèÿ â èíòåðôåéñíîé ÷àñòü ìîäóëÿ.Òî åñòü åñëè èçìåíèòü ìîäóëü òî îí áóäåò ïåðåòðàíñëèðîâàí, à îñòàëüíûå òîëüêî â òîì ñëó÷àå åñëè áûë èçìåíåí èíòåðôåéñ ìîäóëÿ.Âåðíåìñÿ ê ðåàëèçàöèè ÀÒÄ ñ ïîìîùüþ ñêðûòîãî òèïà.

Äîïóñòèìêîìïèëÿòîð âñòðå÷àåòimport serviceè ïîäãðóæàåò òàáëèöó èìåí, è òóò âûÿñíÿåòñÿ ÷òî åñòüTYPE HANDLER;ïîñëå ÷åãî êîìïèëÿòîð âèäèòVAR H:HANDLER;Äðóãîé èíôîðìàöèè ó íåãî íåò, òî åñòü îí íå ìîæåò ïðîèçâåñòè ðàñïðåäåëåíèÿ ïàìÿòè. Ïîýòîìó áûëî ââåäåíî îãðàíè÷åíèå, ÷òî ýòî ìîæåò áûòüëèáî öåëûé òèï, ëèáî óêàçàòåëü, òî åñòü èìååò ìåñòî èñêëþ÷èòåëüíî ðåôåðåíöèàëüíàÿ ñòðóêòóðà.86Ñîçäàòåëè ÿçûêà Àäà ïîíèìàëè ýòó ïðîáëåìó.

 Àäå àáñòðàêòíûéòèï äàííûõ - äåéñòâèòåëüíî àáñòðàêòíûé òèï. Ñóùåñòâóåò 2 êîíöåïöèè- ïðèâàòíûå òèï äàííûõ è îãðàíè÷åííûå ïðèâàòíûé òèï äàííûõ.Îñíîâíîé íåäîñòàòîê ñ òî÷êè çðåíèÿ èíêàïñóëÿöèè - òðåáîâàíèå óïîòðåáëÿòü èñêëþ÷èòåëüíî ðåôåðåíöèàëüíóþ ìîäåëü äàííûõ.Ðàññìîòðèì ïðèìåð íà ÿçûêå Àäàpublic Stacks istype Stack is private;-- îïåðàöèè íàä ñòåêîìprocedure push (S:inout stack, X:integer);procedure pop (S:inout stack, X:out integer);private:type stack is recordtop:integer := 0;body: array (0..N) of integer;end record;end Stacks ßçûêå Àäà ïîáî÷íûé ýôôåêò îò ôóíêöèé çàïðåùåí, òî åñòü íåëüçÿ îôîðìèòü POP êàê ôóíêöèþ.

Åñëè õîòÿ áû îäèí èç òèïîâ äàííûõîáúÿâëåí êàê ïðèâàòíûé, òî â ñïåöèôèêàöèè ïàêåòà ïîÿâëÿåòñÿ äîïîëíèòåëüíàÿ ïðèâàòíàÿ ÷àñòü, ãäå äîëæíà áûòü ðàñïèñàíà ñòðóêòóðà òèïà.Òåïåðü âîçìîæíî èñïîëüçîâàòü ìåòîäû ïðèâàòíîãî òèïà, íî äîñòóï êåãî çàêðûòûì ñòðóêòóðàì çàïðåùåí.Push (S,1);Pop (S,X);S.top := 1; Îøèáêàtype PLINK is access;type link is recordnext: PLINK;X: integer;end record;type PLINK is access link; ïðèâàòíîé ÷àñòè îïèñûâàþòñÿ âñå ñòðóêòóðû, íóæíûå äàííîìóîáúåêòû.

Åå ïîëíîñòüþ âèäèò êîìïèëÿòîð, íî îíà íå äîñòóïíà ïðîãðàììèñòó. Òî åñòü, ÷òîáû çàìåíèòü ðåàëèçàöèþ ñòåêà ñ ìàññèâà íà ñïèñîê,òî ñëåäóåò äîáàâèòü â òåêñò87type Stack is access PLINK;Òåïåðü íåîáõîäèìî ïåðåòðàíñëèðîâàòü âñå ìîäóëè, êîòîðûå èñïîëüçóþò ýòîò òèï äàííûõ. Òàêîé òèï äàííûõ íå ÿâëÿåòñÿ ïîëíîñòüþ àáñòðàêòíûì. Ïî ñðàâíåíèþ ñ Ìîäóëà - 2 ê äàííîìó òèïó ïðèìåíèìû îïåðàöèèïðèñâàèâàíèÿ è ñðàâíåíèÿ.Êàê âèäíî, â ñëó÷àå ïåðâîé ðåàëèçàöèè ñòåêà ñòàíäàðòíîå ïðèñâàèâàíèå è ñðàâíåíèå íà ðàâåíñòâî (ïîâåðõíîñòíûå îïåðàöèè) ðàáîòàþòêîððåêòíî, êîãäà êàê â âòîðîì ñëó÷àå ýòè îïåðàöèè ìîãó áûòü íåêîððåêòíûìè.Äëÿ ðåøåíèÿ ýòîé ïðîáëåìû áûëè ââåäåíû îãðàíè÷åííûå ïðèâàòíûåòèïû äàííûõ.type T is limited privateÒåïåðü ê ýòîìó òèïó ïðèìåíèìû òîëüêî òå îïåðàöèè, êîòîðûå îïèñàíû â ñàìîì ïàêåòå.ÎáåðîíRecordtop:Integer;body:ARRAY N OF INTEGER;END;TYPE Stack=RECORDEND;Ðåàëèçàöèÿ â Îáåðîíå íå óñòóïàåò â òî÷êè çðåíèÿ ñêîðîñòè ðåàëèçàöèè Ìîäóëà - 2, íî óëó÷øàåò ãèáêîñòü ÿçûêà.

Íî Âèðò îòîøåë îò ïðèíöèïà ÐÎÐÈ, òî åñòü ñîâìåùåíû îïðåäåëåíèÿ è ðåàëèçàöèÿ.Ïðè÷èíîé ýòîãîñòàëà óâåðåííîñòü âèðòà â òîì, ÷òî ïðîãðàììèðîâàíèÿ íà Îáåðîíå âñåãäàáóäåò ïðîèñõîäèòü â íåêîòîðîé ñðåäå ïðîãðàììèðîâàíèÿ.Òî åñòü ïðèíöèï ðàçäåëåíèÿ îïðåäåëåíèÿ è ðåàëèçàöèè áûë ïåðåëîæåí íà äîêóìåíòèðóþùèå ñèñòåìû.  C# è Java òà æå ñõåìà.Èòàê ðàçäåë ïðî èíêàïñóëÿöèþ çàêîí÷åí.Ãëàâà 6Êëàññ. Îïðåäåëåíèå íîâîãî òèïà äàííûõ ñ ïîìîùüþ êëàññîâ.Êëàññ - ýòî âñåãäà íîâûé òèï äàííûõ.

Êëàññ ìîæåò áûòü ðåàëèçîâàí âñòàíäàðòíîé áèáëèîòåêå èëè âñòðîåí â êîìïèëÿòîð. Íàïðèìåð â .NETêëàññû Object è String âñòðîåíû â êîìïèëÿòîð.88Ìîäóëü ÿâëÿåòñÿ áîëåå óíèâåðñàëüíûì ïîíÿòèåì ÷åì êëàññ. Íàïðèìåð â Ñ++ âñå ÷òî ïðèíàäëåæèò êëàññó, ñîäåðæèòñÿ â this.  Ñ# ìîæíî ââîäèòü îïåðàòîðû ïðåîáðàçîâàíèÿ äëÿ ñîîòâåòñòâóþùåãî êëàññà.

ÂÑ++ ýòî ðåøàëîñü ñ ïîìîùüþ îïåðàöèè ïðåîáðàçîâàíèÿ, êîòîðàÿ ÿâëÿëàñü ÷ëåíîì êëàññà Ò1 è ïðèâîäèëà ê êëàññó Ò2. Ñ# ýòî ðåàëèçîâàíî ñ ïîìîùüþ ñòàòè÷åñêèõ ôóíêöèé ÷ëåíîâ ëèáîÒ1 ëèáî Ò2. Ñ# è Java îòñóòñòâóþò ãëîáàëüíûå ôóíêöèè. Èõ çàìåíÿþò ñòàòè÷åñêèõ ôóíêöèè çàêðûòûõ êëàññîâ. Åãî íåëüçÿ íàñëåäîâàòü è îáúåêòòàêîãî êëàññà íåëüçÿ ïîðîäèòü. Òî åñòü ýòî ÿâëÿåòñÿ íå êëàññîì, à ñêîðåå ìîäóëåì.  Ñ# åñòü ïîíÿòèå ñòàòè÷åñêîãî êëàññà - ïîëíûé àíàëîãìîäóëÿ.

Òàêèì îáðàçîì, ìîäóëü áîëåå óíèâåðñàëåí, íî ìåíåå óäîáåí.Ïóíêò 1. ×ëåíû êëàññà.class name: íàñëåäîâàíèå{ñïèñîê ÷ëåíîâ};Òàêîé ñèíòàêñèñ ïðèñóòñòâóåò â Java, C#, C++.  Ñ#, Java, Delphi åñëèðîäèòåëü íå óêàçàí, òî ðîäèòåëåì ñ÷èòàåòñÿ êëàññ Object. Delphi:type name = class (íàñëåäîâàíèå)ñïèñîê ÷ëåíîâ-äàííèõend;C++ è Delphi ïîääåðæèâàþò ïðèíöèï ÐÎÐÈ.  Ñ++ ìû ìîæåò îïèñûâàòü òåëî ôóíêöèè âíóòðè òåëà êëàññà, ÷òî ïîçâîëÿåò êîìïèëÿòîðóñäåëàòü ôóíêöèþ âñòðàèâàåìîé.  Delphi çàïðåùåíî îïèñûâàòü òåëîôóíêöèè â îïèñàíèè è èíòåðôåéñà êëàññà.class X{int i;void f(int);};void X::f(int){..}Delphi:type T = classprocedure P;89end;procedure T.P;beginend;Ïóíêò 1. ×ëåíû êëàññîâ.-÷ëåíû-äàííûå-÷ëåíû-ôóíêöèè-÷ëåíû-òèïûÂñå ÷ëåíû êëàññà ìîæíî ðàçäåëèòü íà ñòàòè÷åñêèå è íå ñòàòè÷åñêèå.Íå ñòàòè÷åñêèå ÷ëåíû - äàííûå îáîáùåíèå ïîíÿòèå ÷ëåíà çàïèñè.Îáðàùåíèå ê íèì èäåò <èìÿ îáúåêòà>.<èìÿ ÷ëåíà>.

 Ñ++ òàê æååñòü îïåðàöèÿ ->.Ñòàòè÷åñêèå ÷ëåíû - äàííûå ñ òî÷êè çðåíèÿ ðàñïðåäåëåíèÿ ïàìÿòè ãëîáàëüíûå ïåðåìåííûå.  Ñ++ Äîñòóï ê íèì ïî èìåíè êëàññà C::i. ÂC# è Java, C.i.  Ñ++ ìîæíî îáðàùàòüñÿ ê ñòàòè÷åñêèì ÷ëåíàì è ÷åðåçîáúåêò êëàññà.90Ëåêöèÿ 2218.11.2008Äëÿ ñòàòè÷åñêèõ ÷ëåíîâ êëàññà èìÿ êëàññà âûñòóïàåò êàê èìÿ ìîäóëÿ. Îáðàùåíèå ê ÷ëåíó ïðîñòðàíñòâà èìåí ÷åðåõ èìÿ ïðîñòðàíñòâà èìåíè ê ñòàòè÷åñêîìó ÷ëåíó êëàññà ÷åðåç èìÿ êëàññà ñèíòàêñè÷åñêè ýêâèâàëåíòíû.Ðàññìîòðèì ðàñïðåäåëåíèå ïàìÿòè. Äëÿ íåñòàòè÷åñêèõ ÷ëåíîâ ïîìÿòü îòâîäèòñÿ òàì æå, ãäå è è ïàìÿòü äëÿ îáúåêòà êëàññà.

Ñî ñòàòè÷åñêèìè ÷ëåíàìè ñîâñåì äðóãàÿ ñèòóàöèÿ.  C# è Java ïàìÿòü îòâîäèòñÿñèñòåìîé â ñåãìåíòå äàííûõ.  Ñ++ ñàì ïðîãðàììèñò äîëæåí óêàçàòü âêàêîé ôàéëå áóäåò ðàçìåùåí ÷ëåí äàííûõ./*X.h*/class X{static int a;};/*X.cpp*/int X::a; *.h ëó÷øå íå âêëþ÷àòü, òàê êàê âîçìîæíî ïåðåîïðåäåëåíèå èìåíè.Ïîãîâîðèì î ñòàòè÷åñêèõ è íå ñòàòè÷åñêèå ÷ëåíû - ôóíêöèè. Íå ñòàòè÷åñêàÿ ôóíêöèÿ - îñîáàÿ ôóíêöèÿ, êîòîðàÿ îòëè÷àåòñÿ ñëåäóþùèìè âåùàìè:1.

Êëàññ - îáëàñòü äåéñòâèÿ.(òî åñòü ôóíêöèè ÷ëåíû òðàíñëèðóþòñÿ âêîíòåêñòå ñâîåãî êëàññà)2. Íåÿâíûé ïàðàìåòð (àäðåñ îáúåêòà).  Ñ++ - ýòî this (óêàçàòåëü).ÂC# è Java - this (ññûëêà).  D è Smalltalk - self.Òî åñòüclass X{int i;void f(){this -> i = 0;i = 2;}};Ó êàæäîé ôóíêöèè åñòü íåñêîëüêî îáëàñòåé äåéñòâèÿ. Òî åñòü òåëîôóíêöèè ÿâëÿåòñÿ âëîæåííûì ïî îòíîøåíèþ ê òåëó êëàññà. Íàëåäîâàíèåòàê æå äàåò âëîæåííîñòü (ïîòîìêè âëîæåííû â ïðåäêîâ).91Îòäåëüíî ðàññìîòðèì ôîðìàëüíûå ïàðàìåòðû.  Delphi ïàðàìåòðûèìåþò îáëàñòü äåéñòâèÿ êëàññà (òî åñòü èõ èìåíà íå ìîãóò ñîâïàäàòü ñèìåíàìè êëàññà).  C/C++ îíè ïðèíàäëåæàò òåëó ôóíêöèè.Äëÿ äîñòóïà ê çàêðûòûì ïîëÿì êëàññà ñëåäóåò èñïîëüçîâàòü óêàçàòåëü this->. Âàðèàíò ðàçðåøåíèÿ êîíôëèêòà èìåí - íàêëàäûâàòü îãðàíè÷åíèÿ íà èìåíà. ñòàòè÷åñêèõ ôóíêöèÿ - ÷ëåíàõ íåëüçÿ îáðàùàòüñÿ ê íåñòàòè÷åñêèì÷ëåíàì êëàññà ÷åðåç this.

Îáðàùåíèå âîçìîæíî òîëüêî ÷åðåç ÿâíîå óêàçàíèå èìåíè îáúåêòà.Âñå ôóíêöèè-÷ëåíû èìåþò ìàêñèìàëüíûå ïðàâà äîñòóïà ê ÷ëåíàìêëàññà.Äëÿ ñòàòè÷åñêèõ ÷ëåíîâ äàííûõ íåò íèêàêîé ðàçíèöû ìåæäó óêàçàòåëåì íà ãëîáàëüíûå äàííûå è óêàçàòåëåí íà ñòàòè÷åñêèé ÷ëåí êëàññà.int * pi;int a;pi = &a;int X::stat = -1;pi = &X::stat;Àíàëîãè÷íî ñ èìåíàìè ôóíêöèévoid (*pf)(void);pf = X::f;Åñëè ðå÷ü èäåò î óêàçàòåëÿõ íà ÷ëåíû äàííûå, òî âñå íå òàê. int X::*p; - óêàçàòåëü íà ÷ëåí êëàññà X.class X{int i;int y;void f();void g();};p = &X::i; Òîãäà çäåñü õðàíèòñÿ ñìåùåíèå ïîëÿ i â êëàññå X.p = &X::y; Òîãäà çäåñü õðàíèòñÿ ñìåùåíèå ïîëÿ y â êëàññå X.void (X::*)(void) PFX;PFX = & X::f;PFX = & X::g;X anx;92anx.*p;anx.*PFX();px -> p;px -> * PFX ();Âî âñåõ ÿçûêàõ äîïóñêåàòñÿ ðàçìåùàòü êîíñòàíòíûå è íå êîíñòàíòíûå îáúåêòû.const int i;Ýòîò ÷ëåí ÿâëÿåòñÿ êîíòàíòîé è ìîæåò áûòü èíèöèàëèçèðîâàí ïðÿìîâ îïðåäåëåíèè (òàê êàê îáúåêò öåëîãî òèïà).

Íî òàêèå ÷ëåíû ìîãóò áûòüòîëüêî static. Èíà÷å ïðèøëîñü áû õðàíèòü íà êàæäûé îáúåêò êëàññàìíîãî ëèøíèõ äàííûõ. C# åñëè ðå÷ü èäåò î êîíñòàíòå, òî ñëîâî const ãîâîðèò î òîì, ÷òîâûðàæåíèå ìîæåò áûòü âû÷èñëåííî ñòàòè÷åñêè è ÷òî îáúåêò ÿâëÿåòñÿñòàòè÷åñêèì. Òàê æå â C# åñòü ìîäèôèêàòîð readonly.

Îí ñïåöèôèöèðóåò òî, ÷òî ïîñëå èíèöèàëèçàöèè îáúåêòà îí íå ìîæåò ïîòåðÿòü ñâîåçíà÷åíèå, íî îí íå îáÿçàí áûòü ñòàòè÷åñêèì è ìîæåò áûòü èíèöèàëèçèðîâàí ëþáûì âûðàæåíèåì âî âðåìÿ âûïîëíåíèÿ.Ïåðåéäåì ê òðåòüåìó âàðèàíòó äàííûõ - òèïàì.class X{class Y{};};Íàïðèìåð:STLvector{iterator{};}; Java âíóòðåííèé êëàññ - íåñòàòè÷åñêèé âëîæåííûé êëàññ. Ñòàòè÷åñêèé âëîæåííûé êëàññ - îáû÷íûé âëîæåííûé êëàññ.

Характеристики

Тип файла
PDF-файл
Размер
414,21 Kb
Тип материала
Высшее учебное заведение

Список файлов лекций

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6547
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее