Об'єктно-орієнтований аналіз та проектування програмного забезпечення. Програмне забезпечення "Цифровий диктофон"

Створення діаграм: варіантів використання, взаємодії, класів, станів та компонентів. Генерування коду на основі створених діаграм за допомогою StarUML на об'єктно-орієнтовній мові програмування Java. Головне вікно програми "Цифровий диктофон", лістинг.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык украинский
Дата добавления 21.12.2015
Размер файла 1,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://allbest.ru

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Черкаський політехнічний технікум

Звіт

з навчальної практики з дисципліни

«Конструювання програмного забезпечення»

на тему:

«Об`єктно-орієнтований аналіз та проектування програмного забезпечення. Програмне забезпечення «Цифровий диктофон»

Підготував

студент групи ПС 4-1

Рябокінь К.С.

Перевірив

Викладач

Мигаленко М. І.

Черкаси, 2015 р.

Тема: об'єктно-орієнтований аналіз і проектування програмного забезпечення. Програмне забезпечення кодового замка.

Мета: закріпити основні знання, отримані на заняттях з конструювання програмного забезпечення.

Теоретичні відомості

UML (Unified Modeling Language) -- уніфікована мова моделювання, використовується у парадигмі об'єктно-орієнтованого програмування. Є невід'ємною частиною уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, це відкритий стандарт, що використовує графічні позначення для створення абстрактної моделі системи, називаної UML-моделлю. UML був створений для визначення, візуалізації, проектування й документування в основному програмних систем. UML не є мовою програмування, але в засобах виконання UML-моделей як інтерпретованого коду можлива кодогенерація. В UML використовується 13 видів діаграм:

Структурні діаграми:

Класів

Компонент

Композитної/складеної структури

Кооперації (UML2.0)

Розгортування

Об'єктів

Пакетів

Діаграми поведінки:

Діяльності

Скінчених автоматів (станів)

Прецедентів

Діаграми взаємодії:

Кооперації (UML1.x)

Комунікації (UML2.0)

Огляду взаємодії (UML2.0)

Послідовності

Синхронізації (UML2.0)

Моделювання - в програмній інженерії , це процес створення моделі даних для інформаційної системи з застосуванням формальних підходів.

Клас - визначає абстрактні характеристики деякої сутності, включаючи характеристики самої сутності (її атрибути або властивості) та дії, які вона здатна виконувати (її поведінки,методи або можливості).

Об'єкт - окремий екземпляр класу (створюється після запуску програми і ініціалізації полів класу).

Метод - можливості об'єкта. Дія яку можна виконати з об'єктом.

Спадкування - клас може мати «підкласи», спеціалізовані, розширені версії надкласу.

Завдання

Цифровий диктофон - це побутовий електронний пристрій, призначений для запису і відтворення мови. Звукові повідомлення записуються через вбудований мікрофон і зберігаються в пам'яті пристрою. Повідомлення відтворюються через гучномовець. Робота пристрою здійснюється під управлінням центрального процесора.

Диктофон зберігає до 10 звукових повідомлень. Довжина кожного повідомлення обмежена розміром вільної пам'яті. Диктофон здійснює прямий (за номером повідомлення) доступ до будь-якого повідомлення з пам'яті. Користувач має можливість відтворювати повідомлення, що зберігаються в пам'яті диктофона, стирати їх, записувати нові. Виконавцем повинна бути розроблена схема бази даних для зберігання повідомлень в пам'яті диктофона.

Інтерфейс з користувачем здійснюється за допомогою екранного меню і кнопок на корпусі диктофона. За допомогою кнопок-стрілок здійснюється навігація по пунктах меню. Кнопки «Так», «Ні» служать для підтвердження або скасування користувачем вибору тієї чи іншої опції меню (структуру меню виконавець повинен розробити самостійно). Є також кнопки «Відтворення», «Пауза» і «Запис» для роботи зі звуковими повідомленнями.

Під час запису повідомлення на екрані відображається час, протягом якого ведеться запис, при відтворенні - тривалість відтворювальної частини повідомлення.

Якщо диктофон не використовується, через 30 секунд він автоматично переходить в режим заощадження енергії. У цьому режимі ніякі операції над звуковими повідомленнями не можливі. Енергія витрачається тільки на збереження пам'яті диктофона в незмінному стані. Перехід з режиму заощадження енергії в звичайний режим здійснюється при натисканні користувачем будь-якої кнопки.

Диктофон є датчик рівня заряду батарей. При падінні рівня заряду нижче встановленої межі диктофон автоматично переходить в режим заощадження енергії (незалежно від того чи використовується він в даний момент чи ні). Перехід у звичайний режим стає можливим тільки після відновлення нормального рівня заряду батарей.

Хід роботи

Діаграма варіантів використання

Суть даної діаграми полягає в наступному: проектована система представляється у вигляді безлічі сутностей чи акторів, що взаємодіють із системою за допомогою так званих варіантів використання. Варіант використання використовують для описання послуг, які система надає актору. Іншими словами, кожен варіант використання визначає деякий набір дій, який виконує система при діалозі з актором. При цьому нічого не говориться про те, яким чином буде реалізована взаємодія акторів із системою.

Рисунок 1 - Діаграма варіантів використання

Діаграма взаємодії

Як правило, кожна окрема діаграмма взаємодії описує поведінку тільки в межах одного варіанта використання. На такій діаграммі прийнято відображаюти екземпляри об'єктів та повідомлення, якими ці об'єкти обмінюються один з одним в рамках даного варіанта використання.

Рисунок 2 - Діаграма взаємодії

Діаграма класів

Дана діаграма відображає статичні елементи, такі як: класи,типи даних, їх зміст та відношення. Діаграма класів, також, може містити позначення для пакетів та може містити позначення для вкладених пакетів. Також, діаграма класів може містити позначення деяких елементів поведінки, однак їх динаміка розкривається в інших типах діаграм.

Рисунок 3 - Діаграма класів

Діаграма станів

Діаграми станів застосовуються для того, щоб пояснити, яким чином працюють складні об'екти.Діаграма станів показує, як об'єкт переходить з одного стану в інший. 

Рисунок 4 - Діаграма станів для класу DPhoneGUI

Діаграма компонентів

Діаграма компонентів дозволяє визначити архітектуру нашої системи, а також встановити залежності між програмними компонентами. Всього для побудови діаграми компонентів існує три основних підходи , я використав третій, зв'язавши компоненти залежністю.

Рисунок 5 - Діаграма компонентів.

Згенерований базовий лістинг

public class Sound

{

private static boolean pause = false;

private static boolean play = false;

private static long pauseLocation;

private static long soundTotalLength;

private static AudioStream audioStream;

final static AudioFormat format = getFormat();

static BufferedInputStream binStream;

private static InputStream in;

getFormat()

{

}

Boolean isPlaying()

{

}

void pauseSound()

{

}

playSound()

{

}

}

public class Capture

{

AudioInputStream sound;

private static File file;

// полное имя файла

private static String soundFileName;

// основное имя файла

private final static String filename;

// номер файла

static File temp;

private static int suffix = 0;

private final static AudioFileFormat.Type fileType;

protected static boolean running, stopPl, stopCap;

private static ByteArrayOutputStream out, save;

static TargetDataLine line = null;

captureAudio()

{}

chooseFile()

{}

getNewFile()

{}

playAudio()

{}

saveAudio()

{}

stopAudio()

{}

}

public class DPhoneGUI

{

private JButton choseFile;

private JCheckBoxMenuItem jCheckBoxMenuItem1;

private JLabel jLabel1;

private JLabel jLabel2;

private JLabel jLabel4;

private JButton playButton;

private JButton recButton;

private JButton stopButton;

public static void main(String args[])

{}

}

Лістинг програми

package dPhone;

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.sound.sampled.AudioFormat;

import javax.swing.JFrame;

import sun.audio.AudioPlayer;

import sun.audio.AudioStream;

public class Sound extends JFrame {

private static boolean play = false;

private static boolean pause = false;

private static long pauseLocation;

private static long soundTotalLength;

private static AudioStream audioStream;

final static AudioFormat format = getFormat();

static BufferedInputStream binStream;

private static InputStream in;

static AudioFormat getFormat() {

float sampleRate = 8000;

int sampleSizeInBits = 8;

int channels = 1;

boolean signed = true;

boolean bigEndian = true;

return new AudioFormat(sampleRate,

sampleSizeInBits, channels, signed, bigEndian);

}

public static boolean isPlaying() {

if (play) {

return true;

} else {

return false;

}

}

public static void playSound(final File url) throws FileNotFoundException, IOException {

play = true;

/*

if (pause) {

//in.skip(pauseLocation);

in = new FileInputStream(url);

binStream = new BufferedInputStream(in);

audioStream = new AudioStream(in);

audioStream.skip(soundTotalLength - pauseLocation);

AudioPlayer.player.start(audioStream);

pause = false;

}

else {

pause = false;

*/

in = new FileInputStream(url);

//soundTotalLength = in.available();

binStream = new BufferedInputStream(in);

audioStream = new AudioStream(in);

//soundTotalLength = audioStream.available();

AudioPlayer.player.start(audioStream);

}

public static void pauseSound() {

pause = true;

if (isPlaying()) {

AudioPlayer.player.stop(audioStream);

try {

pauseLocation = audioStream.available();

} //AudioPlayer.player.start(audioStream);

catch (IOException ex) {

System.err.println("I/O problems. File problem: ");

System.exit(-47);

}

}

}

public static void stopSound() {

AudioPlayer.player.stop(audioStream);

}

}

package dPhone;

import java.awt.*;

import java.awt.event.*;

import java.io.*;

import javax.sound.sampled.*;

import javax.swing.*;

import static javax.swing.JFrame.EXIT_ON_CLOSE;

import dPhone.Sound;

import java.util.logging.Level;

import java.util.logging.Logger;

public class Capture extends Sound {

AudioInputStream sound;

private static File file;

// полное имя файла

private static String soundFileName;

// основное имя файла

private final static String filename = "audio_";

// номер файла

static File temp;

private static int suffix = 0;

private final static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;

protected static boolean running, stopPl, stopCap;

private static ByteArrayOutputStream out, save;

static TargetDataLine line = null;

static void captureAudio() {

try {

final AudioFormat format = Sound.getFormat();

DataLine.Info info;

info = new DataLine.Info(

TargetDataLine.class, format);

line = null;

line = (TargetDataLine) AudioSystem.getLine(info);

line.open(format);

line.start();

stopCap = false;

stopPl = true;

Runnable runner;

runner = new Runnable() {

int bufferSize = (int) format.getSampleRate()

* format.getFrameSize();

byte buffer[] = new byte[bufferSize];

@Override

public void run() {

out = new ByteArrayOutputStream();

running = true;

try {

while (running) {

int count = line.read(buffer, 0, buffer.length);

if (count > 0) {

out.write(buffer, 0, count);

}

}

out.close();

} catch (IOException e) {

System.err.println("I/O problems: " + e);

System.exit(-1);

}

}

};

Thread captureThread = new Thread(runner);

captureThread.start();

} catch (LineUnavailableException e) {

System.err.println("Line unavailable: " + e);

System.exit(-2);

}

}

static void stopAudio() {

save = out;

line.stop();

line.close();

}

public static void chooseFile() {

JFileChooser ch = new JFileChooser();

ch.showOpenDialog(null);

temp = ch.getSelectedFile();

//String filePath = chFile.getAbsolutePath();

}

static File getNewFile() {

try {

do {

// новое название файла

soundFileName = filename + (suffix++)

+ "." + fileType.getExtension();

file = new File(soundFileName);

} while (!file.createNewFile());

} catch (IOException ex) {

System.exit(-11);

}

return file;

}

static void saveAudio() {

//save = out;

try {

byte audio[] = save.toByteArray();

InputStream input = new ByteArrayInputStream(audio);

final AudioFormat format = getFormat();

AudioInputStream ais = new AudioInputStream(input, format,

audio.length / format.getFrameSize());

AudioSystem.write(ais, fileType, temp);

save.close();

} catch (IOException e) {

System.err.println("I/O problems: " + e);

System.exit(-3);

}

}

static void playAudio() {

try {

stopCap = true;

stopPl = false;

Sound.playSound(temp);

} catch (IOException ex) {

System.err.println("I/O problems. File not found. File problem: ");

System.exit(-44);

}

}

}

package dPhone;

/*

* To change this license header, choose License Headers in Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

import static dPhone.Capture.chooseFile;

import java.io.File;

//package dPhone;

/**

*

* @author Костя

*/

public class DPhoneGUI extends javax.swing.JFrame {

/**

* Creates new form DPhone

*/

public DPhoneGUI() {

initComponents();

}

/**

* This method is called from within the constructor to initialize the form.

* WARNING: Do NOT modify this code. The content of this method is always

* regenerated by the Form Editor.

*/

@SuppressWarnings("unchecked")

// <editor-fold defaultstate="collapsed" desc="Generated Code">

private void initComponents() {

jCheckBoxMenuItem1 = new javax.swing.JCheckBoxMenuItem();

jLabel1 = new javax.swing.JLabel();

jLabel4 = new javax.swing.JLabel();

recButton = new javax.swing.JButton();

stopButton = new javax.swing.JButton();

choseFile = new javax.swing.JButton();

playButton = new javax.swing.JButton();

jLabel2 = new javax.swing.JLabel();

jCheckBoxMenuItem1.setSelected(true);

jCheckBoxMenuItem1.setText("jCheckBoxMenuItem1");

jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/images.jpg"))); // NOI18N

jLabel1.setText("jLabel1");

jLabel4.setText("jLabel4");

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

getContentPane().setLayout(null);

recButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/rec.png"))); // NOI18N

recButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

recButtonActionPerformed(evt);

}

});

getContentPane().add(recButton);

recButton.setBounds(110, 240, 110, 120);

stopButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/stop.png"))); // NOI18N

stopButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

stopButtonActionPerformed(evt);

}

});

getContentPane().add(stopButton);

stopButton.setBounds(220, 240, 110, 120);

choseFile.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/chose file.png"))); // NOI18N

choseFile.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

choseFileButtonActionPerformed(evt);

}

});

getContentPane().add(choseFile);

choseFile.setBounds(220, 90, 110, 120);

playButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/play.png"))); // NOI18N

playButton.addActionListener(new java.awt.event.ActionListener() {

public void actionPerformed(java.awt.event.ActionEvent evt) {

playButtonActionPerformed(evt);

}

});

getContentPane().add(playButton);

playButton.setBounds(330, 240, 110, 120);

jLabel2.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Alien Ink 2560X1600 Abstract Background.jpg"))); // NOI18N

jLabel2.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));

getContentPane().add(jLabel2);

jLabel2.setBounds(0, 0, 570, 380);

pack();

}// </editor-fold>

private void playButtonActionPerformed(java.awt.event.ActionEvent evt) {

Capture.playAudio();

}

private void recButtonActionPerformed(java.awt.event.ActionEvent evt) {

Capture.captureAudio();

}

private void stopButtonActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

Capture.running = false;

if (Capture.line.isRunning() && !Capture.stopCap && Capture.stopPl) {

Capture.stopAudio();

}

if (Capture.isPlaying() && Capture.stopCap && !Capture.stopPl) {

Capture.stopSound();

}

Capture rec = new Capture();

File f = rec.getNewFile();

Capture.temp = f;

Capture.saveAudio();

}

private void choseFileButtonActionPerformed(java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

Capture.chooseFile();

}

/**

* @param args the command line arguments

*/

public static void main(String args[]) {

/* Set the Nimbus look and feel */

//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">

/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.

* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html

*/

try {

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {

if ("Nimbus".equals(info.getName())) {

javax.swing.UIManager.setLookAndFeel(info.getClassName());

break;

}

}

} catch (ClassNotFoundException ex) {

java.util.logging.Logger.getLogger(DPhoneGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (InstantiationException ex) {

java.util.logging.Logger.getLogger(DPhoneGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (IllegalAccessException ex) {

java.util.logging.Logger.getLogger(DPhoneGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

} catch (javax.swing.UnsupportedLookAndFeelException ex) {

java.util.logging.Logger.getLogger(DPhoneGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);

}

//</editor-fold>

//</editor-fold>

/* Create and display the form */

java.awt.EventQueue.invokeLater(new Runnable() {

public void run() {

new DPhoneGUI().setVisible(true);

}

});

}

// Variables declaration - do not modify

private javax.swing.JButton choseFile;

private javax.swing.JCheckBoxMenuItem jCheckBoxMenuItem1;

private javax.swing.JLabel jLabel1;

private javax.swing.JLabel jLabel2;

private javax.swing.JLabel jLabel4;

private javax.swing.JButton playButton;

private javax.swing.JButton recButton;

private javax.swing.JButton stopButton;

// End of variables declaration

}

Результати роботи

Рисунок 6. Головне вікно програми

діаграма диктофон програмний

Висновок

На даній навчальній практиці були поглиблені знання з використання StarUML та з розробки діаграм у даному середовищі. Зокрема, були створені наступні діаграми: варіантів використання, взаємодії, класів, станів та компонентів. Також були отримані навички з генерування коду на основі створених діаграм за допомогою StarUML. Код був згенерований на обєктно-орієнтовній мові програмування Java. Діаграми створювались на основі програмної системи «Цифровий диктофон», код якої приведений у звіті разом із згенерованим у StarUML кодом.

Размещено на Allbest.ru


Подобные документы

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.

    курсовая работа [1,5 M], добавлен 02.12.2015

  • Дослідження алгоритму роботи та коду програми. Оцінка методом "чорного ящика". Тестування і налагодження розробленої програми на алгоритмічній мові високого рівня. Оцінювання якості програмного забезпечення за об’єктно-орієнтованими метриками зв’язності.

    курсовая работа [143,1 K], добавлен 11.03.2021

  • Принципи об'єктно-орієнтованого підходу. Розробка програмного комплексу з використанням цього алгоритму і користувальницьких класів на мові програмування С++. Реалізація простого відкритого успадкування. Тестування працездатності системи класів.

    курсовая работа [98,0 K], добавлен 06.05.2014

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Розробка логічної гри "Тетріс" у складі набору об’єктно-орієнтованих моделей, програмного коду з використанням об’єктно-орієнтованної мови Java. Проектування архітектури гри, аналіз вимог до неї, опис реалізації, кодування та тестування програми.

    курсовая работа [2,2 M], добавлен 24.10.2010

  • Проектування ієрархії класів побутових приладів (пральна машина, пилосос, телевізор, магнітофон, радіоприймач, музичний центр), створення її структурної схеми. Розробка програми з використанням об'єктів створених класових типів на мові програмування Java.

    лабораторная работа [451,0 K], добавлен 25.01.2014

  • Концепції об'єктно-орієнтованого програмування. Спеціалізовані засоби розробки програмного забезпечення мовою Delphi. Загальні питання побудови та використання сучасних систем об’єктно-орієнтованного та візуального проектування програмних засобів.

    курсовая работа [201,4 K], добавлен 01.04.2016

  • Класифікація об'єктно-орієнтованих мов програмування. Розробка алгоритмічного та програмного забезпечення комп'ютерної системи управління процесом випалювання будівельних матеріалів. Тестування програмного забезпечення, оцінка його ефективності.

    курсовая работа [1,6 M], добавлен 25.04.2015

  • Основні аспекти використання стандартних компонентів ООС програмування Delphi для створення звітної документації. Опис компонентів – QReport, PrintDialog та PrintSetupDialog. Приклади створення звітів. Iнше програмне забезпечення для побудови звітів.

    курсовая работа [488,4 K], добавлен 08.12.2008

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.