Объектно-ориентированное программирование. 6

Міністерство  освіти і науки, молоді та спорту

Національний  технічний університет «ХПІ»

кафедра «Інформатика та інтелектуальна власність» 
 
 
 

 
 
 
«Затверджую»

зав. кафедрою ІІВ

_________________М.М.Солощук

 
 
 
 
 
 
 

ПОЯСНЮВАЛЬНА  ЗАПИСКА

курсового проекту 

з дисципліни «Об'єктно-орієнтоване програмування» 

Тема  проекту

«Простий Медia-Програвач» 
 
 
 
 

         Керівник  проекту

       Любченко  Н.Ю.

       ________________

   
 
       Виконавець

         Романченко Ю.В.

       Группа  КИТ 40-А

       _______________

 
 
 
 
 
 
 

Харків 2011 

    АННОТАЦИЯ

     В данном курсовом проекте разработана программа, для воспроизведения медиа файлов (аудио/видео).

Обязательные  условия:

  1. Воспроизведение mp3/avi файлов.
  2. Окно автора программы.
  3. 3 примера мелодий
  4. Случайное изменение картинок при проигрывании, если отсутствует видео поток.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

СОДЕРЖАНИЕ

Введение…………………………………………………………………………..4

  1. Объектно-ориентированное программирование.………………………...…..…6

1.1 Предыстория…………………………………………………………..………6

1.2 Основные понятия ООП.………………………………………….…….……8

1.3 Обобщение…………………………………………………………..……….10

  1. Описание среды программирования Borland C++ Builder………..…..………11

2. 1 Описание главного окна Borland C++ Builder…………………….………12

  1. Код программы. Описание интерфейса ……………………….….…...………16

3.1 Описание  кода программы……………………………………………….…16

3.2 Описание компонентов……………………………………………...………23

  1. Тестирование программы…………………………………………………….…24

5.   Выводы…..……………………………………………………………………….26

6.   Использованная литература…………………………………………….………27

Приложение  А……………………………………………………………………28 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

ВВЕДЕНИЕ

     При изучении объектно-ориентированного программирования (ООП) наибольшей проблемой является использование новой терминологии и понимание нового подхода к  решению старых задач - новой технологии программирования.

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

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

     Объект - структурированная переменная, содержащая всю информацию о некотором физическом предмете или реализуемом в программе  понятии.

     Класс - описание множества таких объектов и выполняемых над ними действий. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  1. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ, ПРОГРАММИРОВАНИЕ

     Объектно-ориентированное, или объектное программирование (в дальнейшем ООП) – парадигма программирования, в которой основными концепциями являются понятия объектов и классов. В случае языков с прототипированием вместо классов объекты-прототипы.

    1. Предыстория ООП

     Практически сразу после появления языков третьего поколения (1967 г.) ведущие специалисты  в области программирования выдвинули  идею преобразования постулата фон  Неймана: «данные и программы неразличимы в памяти машины». Их цель заключалась в максимальном сближении данных и программы. Решая поставленную задачу, они столкнулись с задачей, решить которую без декомпозиции оказалось невозможно, а традиционные структурные декомпозиции не сильно упрощали задачу. Усилия многих программистов и системных аналитиков, направленные на формализацию подхода, увенчались успехом.

Были  разработаны три основополагающих принципа того, что потом стало  называться объектно-ориентированным  программированием (ООП):

- наследование;

- инкапсуляция;

- полиморфизм.

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

 

     Впоследствии  Симула-1 был обобщен, и появился первый универсальный ООП-ориентированный язык программирования – Симула-67 (67 – по году создания).

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

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

     ОП  возникло в результате развития идеологии процедурного программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так называемое событийно-ориентированное программирование) и компонента (компонентное программирование, КОП).

     Формирование  КОП от ООП произошло, как случилось формирование модульного от процедурного программирования: процедуры сформировались в модули — независимые части кода до уровня сборки программы, так объекты сформировались в компоненты — независимые части кода до уровня выполнения программы. Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование, где агенты — независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством изменения среды, в которой они находятся.

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

     В настоящее время количество прикладных языков программирования (список языков), реализующих объектно-ориентированную  парадигму, является наибольшим по отношению  к другим парадигмам. В области системного программирования до сих пор применяется парадигма процедурного программирования, и общепринятым языком программирования является язык C. Хотя при взаимодействии системного и прикладного уровней операционных систем заметное влияние стали оказывать языки объектно-ориентированного программирования. Например, одной из наиболее распространенных библиотек мультиплатформенного программирования является объектно-ориентированная библиотека Qt, написанная на языке C++.

    1.2   Основные понятия ООП

     Абстрагирование — это способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракция — это набор всех таких характеристик. 

     Инкапсуляция — это свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя. 

     Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности (объекта). Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области. 

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

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

     Полиморфизм — это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. 

     Прототип — это объект-образец, по образу и подобию которого создаются другие объекты. Объекты-копии могут сохранять связь с родительским объектом, автоматически наследуя изменения в прототипе; эта особенность определяется в рамках конкретного языка. 
 
 
 

    1.3   Обобщение 

     Таким образом концепция ООП является естественным развитием концепции модульного программирования, направленным на увеличение производительности программиста, приближение процесса программирования к процессу человеческого мышления и стандартизацию как программ, так их и подхода к ним.

     Объектно-ориентированное программирование базируется на трех принципах и одном механизме: инкапсуляция, наследование, полиморфизм и позднее связывание. (Иногда к ним приписывают программирование, управляемое сообщениями).

     Объектно-ориентированный подход к программированию подразумевает выделение общих свойств у различных объектов и широчайшее применение абстракций всех уровней. 
 
 
 
 
 
 
 
 
 
 
 
 

  1. ОПИСАНИЕ СРЕДЫ ПРОГРАММИРОВАНИЯ Borland C++ Builder

      C++Builder первоначально создавалась только для платформы Microsoft Windows. Поздние версии, содержащие кроссплатформенную компонентную библиотеку Borland, поддерживают и Windows, и Linux.

     В 2003 году Borland выпустила C++BuilderX (CBX), написанный при помощи той же инфраструктуры, что и JBuilder, который при этом был мало похож на C++ Builder или Delphi. Этот продукт предназначался для разработки больших программ для крупных предприятий, но коммерческого успеха не достиг. В конце 2004 года Borland объявила, что продолжит развитие классического C++ Builder и объединит его со средой разработки Delphi, прекратив, таким образом, разработку C++ BuilderX.

     Спустя  примерно год после этого объявления, Borland выпустила Borland Developer Studio 2006, который включал в себя Borland C++Builder 2006, предлагавший улучшенное управление конфигурацией и отладкой. Borland Developer Studio 2006 — единственный полноценный комплект, содержащий Delphi, C++ Builder и C# Builder.

     В 2007 CodeGear выпустила C++Builder 2007, в котором реализовала полную поддержку API Microsoft Windows Vista, увеличила полноту соответствия стандарту ANSI C++, увеличила скорость компиляции и сборки до 500 %, включила поддержку MSBuild, архитектур баз данных DBX4 и «VCL для Web», поддерживающий AJAX. Поддержка API Microsoft Windows Vista включила в себя приложения, изначально оформленные в стиле Vista, и естественную поддержку VCL для Aero и Vista Desktop. CodeGear RAD Studio 2007 содержит C++Builder 2007 и Delphi. Также в 2007 CodeGear «воскресила» марку «Turbo» и выпустила две «Turbo» версии C++Builder: Turbo C++ Professional и Turbo C++ Explorer (бесплатный), основанных на Borland C++ Builder 2006.

     В конце 2008 года компания CodeGear выпустила новую версию RAD Studio, в которую вошли Delphi 2009 и С++Builder 2009. В 2009 году в составе RAD Studio вышел C++Builder 2010.

     Ранее сообщалось, что следующая версия, CodeGear C++ Builder (кодовое имя «Commodore»), будет обладать поддержкой x86-64 и возможностью создавать машинный x86-64 код. Однако в 2010 году в состав RAD Studio XE включена версия C++ Builder XE без этой функциональности.

    2.1   Описание главного окна Borland C++ Builder

Главное окно программы (рис 2.1) содержит:

1. Панель меню.

2. Дерево объектов.

3. Окно редактирования исходного кода.

4. Конструктор формы.

5. Панель инструментов.

6. Редактор  свойств и событий объектов.

Рисунок 2.1 - Главное окно программы 

       Панель  меню - содержит такие важные кнопки как: Файл, Редактирование, Поиск, Проект, Запуск, Компонент, База данных, Инструменты, Окно, Справка (рис. 2.2)

Рисунок 2.2 - Панель меню

     Дерево  объектов предоставляет информацию обо всех используемых объектах в  программе и к какому объекту  они принадлежат. Возможно добавлять, изменять и удалять объекты (рис. 2.3)

 

Рисунок 2.3 - Дерево объектов.

     Редактор кода Borland C++ Builder представляет собой текстовый редактор, приспособленный к службам языков, таких как Visual Basic, Visual C++, и Visual C#. Текст записывается в буфер и выводится на экран в виде текстового документа. Используя объекты модели автоматизации редактора C++ Builder, можно незаметно управлять текстом, как в буфере, так и в представлении (рис. 2.4)

 

Рисунок 2.4 - Редактор кода 

     Конструктор формы позволяет добавлять в программу другие компоненты, изменять название форм, устанавливать ее размер и многое другое (рис. 2.5)

 

Рисунок 2.5 - Конструктор формы 
 

       Обычно панель инструментов располагается в верхней части любого стандартного приложения Windows. Панель инструментов предоставляет прямой доступ к функциям в приложении по нажатию кнопки. Можно добавлять отдельные элементы управления MediaPlayer или выбрать другой элемент управления, например TrackBar, ListBox и так далее (рис. 2.6) 

 

       Рисунок 2.6 - Панель инструментов 
 
 
 
 
 

Редактор свойств и событий объектов - с его помощью можно редактировать любой объект или компонент, используемый в программе, обеспечивает настройку шрифта, настройку размера используемого объекта, создание событий при соответственном действии над объектом/компонентом программы (рис. 2.7)

 

Рисунок 2.7 - Редактор свойств и событий объекта 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  1. КОД ПРОГРАММЫ. ОПИСАНИЕ ИНТЕРФЕЙСА

Интерфейс программы  состоит:

  • панель (для вывода видео файла)
  • прогресс бар (отображает текущее состояние воспроизведения)
  • трекбар (предназначен для регулировки звука)
  • кнопка “О программе”
  • кнопка “Выход”
  • кнопка “Открыть” (выбор файла для воспроизведения)
  • кнопка “плей” (начать воспроизведение)
  • кнопка “стоп” (перемотка файла на начало)
  • кнопка “пауза” (пауза воспроизведения)
  • меню (содержит примеры мелодий) 
    1. Описание кода программы

#include <vcl.h>

#include <stdlib.h>

#include <string.h>

#pragma hdrstop

#include "mediapl.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

bool flag;   //воспроизведение/пауза

char path[256], pathtemp[256]; //переменные для хранения пути

bool a; // для вывода о программе

int x; //смена картинок

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

SpeedButton2->Enabled=False;   

SpeedButton3->Enabled=False;

SpeedButton4->Enabled=False;

TrackBar1->Enabled=False;

TrackBar2->Max=65350;  //звук

TrackBar2->Position=65350; //позиция на предельном значении

GetCurrentDirectory(256,path); //получение текущего каталога

strcat(path,"\\"); // добавление \\

strcpy(pathtemp,path); //копирование во временный путь

ListBox1->Items->Add(strcat(path,"1.mp3")); 
//для воспроизведения примеров мелодий

strcpy(path,pathtemp); //добавление элементов “примеры мелодий”

ListBox1->Items->Add(strcat(path,"2.mp3"));

strcpy(path,pathtemp);

ListBox1->Items->Add(strcat(path,"3.mp3"));

}

void __fastcall TForm1::SpeedButton1Click(TObject *Sender)

{

OpenDialog1->InitialDir="";      //выбор песни/видео

OpenDialog1->Filter=

"Все поддерживаемые файлы|*.avi;*.mp3;"

"mp3|*.mp3|avi|*.avi";

OpenDialog1->Title="Выбор Файла";

if(!OpenDialog1->Execute())

return;

if(MediaPlayer1->FileName == OpenDialog1->FileName){

ShowMessage("Файл уже воспроизводится"); return;}

MediaPlayer1->FileName=OpenDialog1->FileName;

MediaPlayer1->Open();

Panel1->Refresh();  //очистка панели

if(!(MediaPlayer1->FileName=="*.mp3"))  {

randomize();    //перемена картинок

x=random(4)+1;

switch(x)

        {

        case 1: {Image1->Visible=True; Image2->Visible=False; Image3->Visible=False; Image4->Visible=False; break;}

        case 2: {Image1->Visible=False; Image2->Visible=True; Image3->Visible=False; Image4->Visible=False; break;}

        case 3: {Image1->Visible=False; Image2->Visible=False; Image3->Visible=True; Image4->Visible=False; break;}

        case 4: {Image1->Visible=False; Image2->Visible=False; Image3->Visible=False; Image4->Visible=True; break;}

        }

        }

TrackBar1->Max=MediaPlayer1->Length;   //подстройка состояния воспроизведения под длину файла

TrackBar1->Enabled=True;

TrackBar1->Position=0;

Form1->Caption=OpenDialog1->FileName; //название окна

SpeedButton2->Enabled=False;

SpeedButton3->Enabled=True;

SpeedButton4->Enabled=True;

MediaPlayer1->Display=Panel1;

MediaPlayer1->Play(); //воспроизведение

flag=false;

Timer1->Enabled=True; //таймер

a=true;

}

void __fastcall TForm1::SpeedButton2Click(TObject *Sender)

{

//нажатие  на разные кнопки(воспроизведение, стоп, пауза)

MediaPlayer1->Play();

SpeedButton2->Enabled=False;

SpeedButton3->Enabled=True;

SpeedButton4->Enabled=True;

Timer1->Enabled=True;

a=true;

}

void __fastcall TForm1::SpeedButton3Click(TObject *Sender)

{

MediaPlayer1->Rewind();

SpeedButton4->Enabled=False;

SpeedButton3->Enabled=False;

SpeedButton2->Enabled=True;

a=false;

}

void __fastcall TForm1::SpeedButton4Click(TObject *Sender)

{

MediaPlayer1->Pause();

SpeedButton4->Enabled=False;

SpeedButton2->Enabled=True;

SpeedButton3->Enabled=True;

a=false;

}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

MediaPlayer1->Close();

}

void __fastcall TForm1::TrackBar1Change(TObject *Sender)

{

//перемотка

if (TrackBar1->Focused() && MediaPlayer1->Mode == mpPlaying)

   {

   MediaPlayer1->Position = TrackBar1->Position;

   MediaPlayer1->Play(); 
 

   flag = true;

   } 

} 

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

//для непрерывистого  воспроизведения