Енгізу шығару құралы және ағындармен жұмыс

 

Дәріс мақсаты: ағын және ағын түрлерімен танысу, есеп шығару кезінде ағындарды қолдануды үйрену.

Кілттік сөздер: ағын; жолдық ағын; стандартты ағын; файлдық ағын; ағындық кластар.

Жоспар:

  1. Ағындар және ағындық кластар
  2. Енгізу-шығару ағыны
  3. Жолдық ағындар

 

  1. Ағындар және ағындық кластар

Ағын – бұл абстракты ұғым . С++ ағындары, С стиліндегі функциядан айырмашылығы оның шығару — енгізуінде , стандарттармен жұмыс секілді сенімді жұмысты қамтамасыз етеді , қолданушы анықталған мәліметтер типінің, сонымен қатар біркелкі және түсінікті синтаксис .

Мәліметтердің ағынының оқылуы шығарумен аталады. Байттардың жүйелілік сияқты ағын анықталады және нақтылы құрылғыдан тәуелді болмайды , қайсымен айырбастау шығарылады ( оперативті жадта, дискідегі файл, клавиатура немесе принтер ). Ағынмен айырбастау үшін мәліметтің берілуі жылдамдықтың  арттырумен құрылады, ереже бойынша, буфер – оперативті  жадының арнайы облыс арқылы өтеді. Мәліметтің берілуі буфер толтырылғаннан кейін шығарылады , ал буфер таусылса, онда енгізу.

Айырбастау ағыны енгізулер шығаруда, оның екі жақты бағытта бөлуге болады, ағын жұмыс істейтін құрылғының түрімен ағынды стандартты және файлдық, жолдық болып бөлуге болады.

Стандартты ағындар мәліметтерді пернетақтадан және экраннан жіберуге арналған, файлдықтар ағындар – мәлімет тасушы мен файл арасындағы информациямен айырбастайды, ал жолдық ағын – оперативті  жадтағы массивтің символымен жұмыс жасайды.

Ағын үшін С++ кітапханасында кластардың иерархиясы құрылады, ios және streambuf  базалық кластарында құрылған. ios класы жолы мен әдістің шығару мен енгізуден тұрады, streambuf класы ағынды буферлеумен қамтамасыз. Бұл кластардан i stream енгізу үшін ostream шығару үшін  қолданылады. Ең  соңғы екі класс iostream класы үшін базасы болып табылады. Екі бағыттағы ағындық класта табылады, екі ағындық класс төменде класс иерархиясында файлдық және жолдық ағын құрылады. Ары қарай класс ағынында пайдаланылатындар саналады.

                                        

Иерархия схемасы

 
   

 

 

 

 

 

 

 

 

 

 

 

Ios класы форматталған енгізуді — шығаруға арналған құралдар және қателердің тексерулері асырайды .

                                   

                                           Иерархия схемасы

 
   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ios — ағындардың базалық класы;

istream — ағындардың енгізу класы;

ostream — ағындардың шығару класы;

iostream — екі бағыт беру ағындардың класы;

istringstream — жолдық ағындардың енгізу класы;

ostringrstream — жолдық ағындардың шығару класы;

stringstream — екі бағыт беру жолдық ағындардың класы;

ifstream — файлдық ағындардың енгізу класы;

ofstream — файлдық ағындардың шығару класы;

fstream — екі бағыт беру файлдық ағындардың класы.

 

Тақырыптықтарды файлдарда кластардың мынадай сипаттаулары болады:

< ios > — ағындардың енгізу / шығару базалық класы;

< iosfwd > — алдын — ала жариялаудың енгізу / шығару құралы;

< istream > — енгізу ағынының шаблоны;

< ostream > — шығару ағынының шаблоны;

< iostream > — ағындармен енгізу / шығару стандартты объектілері және

                          операциялары;

< fstream > — файлдарға енгізу / шығару ағындары;

< sstream > — жолдарға енгізу / шығару ағындары;

< streambuf > — буферлеу енгізу / шығару ағындары;

< iomanip > — манипуляторлар

                       

  1. Енгізу – шығару ағыны

Программалау тілдері үшін енгізу — шығару стандартты құрылғыларын проекциялау және реализациялау мақсатындағы кең таралған қиындық. Дәстүрлі енгізуді — шығару құрылғылары тек аз ғана қоса салынған типтердің саны. Бірақ, қарапайым емес С++ бағдарламаларда  көптеген пайдаланушылық мәліметтер типтері бар. Сондықтан,осындай мағыналы типті енгізу — шығару мүмкіндіктерін пайдалануға мүмкіндік беру қажет. Енгізу — шығару құрылғылары жай ғана қарапайым, ыңғайлы, қолданыста сенімді және де ең қажеттісі бірдей болу керек екені айқын. Әзірге бәрінің көңілінен шығатын нәтижені ешкім таба қойған жоқ, сол себепті қолданушыға басқа енгізу — шығару құрылғыларын құруға мүмкіндік беру керек, және де қолданысына қарай стандартты енгізу — шығару құрылғыларын кеңейту.

С++-ті жасау мақсаты: қолданушы мәліметтердің жаңа типтерін сипаттай алуы, ыңғайлы және нәтижелі жұмыс істей алуы қоса салынған                 типтері секілді. Сөйтіп, С++ программалау және қолдану үшін енгізу — шығару құрылғылары бәріне ортақ болғанын талап еткен дұрыс сияқты. Осы талаптарды қанағаттандыру нәтижесінде енгізу — шығару ағындық құрылғылары алынды. Енгізу — шығару ағындық құрылғыларының негізгі мақсаты – бұл белгілі бір типтің объектілерін символдар жүйесіне және керісінше айналдыру процесі. Енгізу — шығарудың басқа схемалары бар, бірақ көрсетілгені негізгі болып табылады, және де символды тек жай ғана биттер жиыны деп санасақ, оның табиғи алфавиттік байланысын ескермей, онда көптеген екілік енгізу — шығару схемасын оған келтіруге болады. Сол себепті бағдарламашылық мән мақсаты анықталған типтің объектісі  мен типсіз ( яки маңызды ) жол арасындағы байланысын сипаттау болып табылады.

 

  1. Жолдық ағындар

Жол ағыны жұмысын istringstream, ostringstream stringstream кластары қамтамасыз етеді, istream, ostream және iostream өндірістік класстар болып табылады. Жол ағымын қолдану үшін бағдарламаға ostream бастапқы файлын қосу қажет.

Жол ағынын қолдану, файл ағынын қолдану аналогты айырмашылығы физикалық мәлімет дискідегі файлда емес, оперативтің есінде сақталады. Одан басқа, жол ағыны класы str ( ) әдісінен құралады, string жол көшірмесін қайтаратын немесе сондай жол ағынының мағынасын иемденетіндер:

string str ( )

void str ( const string & s );

Жол ағынында кейбір C кітапханасында sscanf ( ) және sprintf ( ) аналогты функция болып табылады, сонымен қатар естегі жолдармен жұмыс жасайды, енгізу және шығару консолі сипатталған. Мысалы: sprintf ( ) көмегімен естегі кейбір символдық жолдарды қалыпқа келтіруге болады, сосын ол экранға шығады. Бұл қиындықтарды ostringstream объектісімен оңай шешуге болады.

Мысал ретінде алдық бағдарламаның модифицирленген нұсқасын келтірейін, мәтін файлын экранға шығаратын, мәтіндегі әр жолды тексеретін “Line N: ”, мұндағы N—жол  нөмірі:

 

// MyCopy.ccp файлынан — error ( ) функциясын анықтау

// . . .

int main ( int argc. char* argv [ ] )  {

i f (argc != 2) error ( » Қате аргумент саны. » ) ;

ifstream tfile ( argv [ 1 ] ) ;

if ( ! tfile ) error ( “ Қате енгізу файлы : ” . argv [ 1 ] ) ;

int n = 0

char buf [ 1024 ] ;

while ( ! tfile. eof ( ) ) {

   n++;

           tfile. getline ( buf.  sizeof ( buf ) ) ;

           line << “ Line ” << setw ( 3 ) << n << “ :  “ << buf << endl ;

   }

   return 0 ;

}

Көрсетілген бойынша, ағындар файлға байланысты болу мүмкін, негізгі жадта сақталған символдарға емес, диск арқылы. Негізгі жадқа да символдарды қосуға болады. Мысалы: тез баспаға жатпайтын хабарламаны форматтау үшін шығулы жолдық ағындармен қолдануға болады. 

    char* p = new char[message_size];

   ostrstream ost(p,message_size);

   do_something(arguments,ost);

   display(p);

Функция do_something  стандарттық шығару операция бойынша ost  деген функцияны ағынға жазуға болады, ost  функциясын бағынушы функцияларға тапсыруға да болады. Әлде толықтыру бақылауы қажет емес, яғни ost өзінің өлшемін біледі, және толықтырған кезде fail ( ) деген жағдайға ауысады. Содан соң функция display « шын » шығулы ағынға хабарлама жіберу мүмкін. Ондай әдіс көбінесе күрделі құрылғыларға  соңғы операцияларды жазғанда үйлеседі, яғни шығулы құрылғылар  әдеттегі жол жүйелілікке апарады.  Мысалы, ost  функциясы экрандағы бекітілген облысқа сәйкес болу мүмкін.   Тап солай , istrstream  шығулы жолдық  ағын  болады,  ол нөлмен аяқталатын символдардан окылады :

   void word_per_line ( char v [ ], int sz )

   /*

  «v» өлшеммен»sz» бірден жолға жазу

   */

   {

   istrstream ist ( v, sz );

   char b2 [ MAX ];

   while ( ist >> b2 ) cout << b2 << » \n «;

   }

Аяқтайтын нөл файлдың соңы болып саналады.

Жолды ағындар  < strstream.h > файлында көрсетіледі.

 

Бақылау сұрақтары:

  1. Ағын дегеніміз не?
  2. Ағынның түрлері қандай?
  3. Ағын түрлерінің бір-бірінен ерекшелігі неде?
  4. Ағындық кластар дегеніміз не?

 

Әдебиеттер:

  1. Павловская Т.А. С и С++. Программирование на языке высокого уровня.
  2. Р. Лафоре. Объектно-ориентированное программирование в С++.4-е издание. Питер.2004
  3. Подбельский В.В., Фомин С.С. Программирование на языке Си: Учебное пособие. – М.: Финансы и статистика, 2004
  4. Гради Буч. Объектно — ориентированный анализ и проектирование с примерами приложений на С++. — М.: Изд. Бином, Невский Диалект, 1998.
  5. А.В. Замулин. Курс лекций: ООП (С++, Ява, C#)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *