Об'єктно-орієнтований аналіз та проектування програмного забезпечення. Програмне забезпечення 'Цифровий диктофон'
МІНІСТЕРСТВО
ОСВІТИ І НАУКИ УКРАЇНИ
Черкаський
політехнічний технікум
Звіт
з
навчальної практики з дисципліни
«Конструювання
програмного забезпечення»
на
тему:
«Об`єктно-орієнтований
аналіз та проектування програмного забезпечення. Програмне забезпечення
«Цифровий диктофон»
Підготував
студент групи ПС
4-1
Рябокінь К.С.
Перевірив
Викладач
Мигаленко М. І.
Черкаси,
2015 р.
Тема: об'єктно-орієнтований аналіз і
проектування програмного забезпечення. Програмне забезпечення кодового замка.
Мета: закріпити основні знання, отримані на
заняттях з конструювання програмного забезпечення.
Теоретичні відомості
(Unified Modeling Language) - уніфікована мова
моделювання, використовується у парадигмі об'єктно-орієнтованого програмування.
Є невід'ємною частиною уніфікованого процесу розробки програмного забезпечення.
UML є мовою широкого профілю, це відкритий стандарт, що використовує графічні
позначення для створення абстрактної моделі системи, називаної UML-моделлю. UML
був створений для визначення, візуалізації, проектування й документування в
основному програмних систем. UML не є мовою програмування, але в засобах
виконання UML-моделей як інтерпретованого коду можлива кодогенерація. В UML
використовується 13 видів діаграм:
Структурні діаграми:
Класів <#"865010.files/image001.jpg">
Рисунок 1 - Діаграма варіантів
використання
Діаграма взаємодії
Як правило, кожна окрема діаграмма
взаємодії описує поведінку тільки в межах одного варіанта використання
<#"865010.files/image002.jpg">
Рисунок 2 - Діаграма взаємодії
Діаграма класів
Дана діаграма відображає статичні
елементи, такі як: класи <#"865010.files/image003.jpg">
Рисунок 3 - Діаграма класів
Діаграма станів
Діаграми станів застосовуються для
того, щоб пояснити, яким чином працюють складні об'екти.Діаграма станів показує,
як об'єкт переходить з одного стану в інший.
Рисунок 4 - Діаграма станів для
класу DPhoneGUI
Діаграма компонентів
Діаграма компонентів дозволяє
визначити архітектуру нашої системи, а також встановити залежності між
програмними компонентами. Всього для побудови діаграми компонентів існує три
основних підходи , я використав третій, зв’язавши компоненти залежністю.
Рисунок 5 - Діаграма компонентів.
Згенерований базовий лістинг
public class
Sound
{static
boolean pause = false;static boolean play = false;static long
pauseLocation;static long soundTotalLength;static AudioStream
audioStream;static AudioFormat format = getFormat();BufferedInputStream
binStream;static InputStream in;()
{
}
isPlaying()
{
}pauseSound()
{
}()
{
}
} class
Capture
{sound;static
File file;
// полное имя файлаstatic
String soundFileName;
// основное имя файлаfinal
static String filename;
// номер файлаFile
temp;static int suffix = 0;final static AudioFileFormat.Type fileType;static
boolean running, stopPl, stopCap;static ByteArrayOutputStream out,
save;TargetDataLine line = null;()
{}()
{}()
{}()
{}()
{}()
{}
}class
DPhoneGUI
{JButton
choseFile;JCheckBoxMenuItem jCheckBoxMenuItem1;JLabel jLabel1;JLabel
jLabel2;JLabel jLabel4;JButton playButton;JButton recButton;JButton
stopButton;static void main(String args[])
{}
}
Лістинг програми
dPhone;java.io.BufferedInputStream;java.io.File;java.io.FileInputStream;java.io.FileNotFoundException;java.io.IOException;java.io.InputStream;java.util.logging.Level;java.util.logging.Logger;javax.sound.sampled.AudioFormat;javax.swing.JFrame;sun.audio.AudioPlayer;sun.audio.AudioStream;class
Sound extends JFrame {static boolean play = false;static boolean pause = false;static
long pauseLocation;static long soundTotalLength;static AudioStream
audioStream;static AudioFormat format = getFormat();BufferedInputStream
binStream;static InputStream in;AudioFormat getFormat() {sampleRate =
8000;sampleSizeInBits = 8;channels = 1;signed = true;bigEndian = true;new
AudioFormat(sampleRate,, channels, signed, bigEndian);
}static
boolean isPlaying() {(play) {true;
} else
{false;
}
}static void
playSound(final File url) throws FileNotFoundException, IOException {= true;
/*(pause) {
//in.skip(pauseLocation);=
new FileInputStream(url);= new BufferedInputStream(in);= new
AudioStream(in);.skip(soundTotalLength -
pauseLocation);.player.start(audioStream);= false;
}{= false;
//soundTotalLength
= in.available();= new BufferedInputStream(in);= new AudioStream(in);
//soundTotalLength
= audioStream.available();.player.start(audioStream);
}static void
pauseSound() {= true;(isPlaying()) {.player.stop(audioStream);{=
audioStream.available();
}
//AudioPlayer.player.start(audioStream);(IOException ex)
{.err.println("I/O problems. File problem: ");.exit(-47);
}
}
}static void
stopSound() {.player.stop(audioStream);
}
}dPhone;java.awt.*;java.awt.event.*;java.io.*;javax.sound.sampled.*;javax.swing.*;static
javax.swing.JFrame.EXIT_ON_CLOSE;dPhone.Sound;java.util.logging.Level;java.util.logging.Logger;class
Capture extends Sound {sound;static File file;
// полное имя файлаstatic
String soundFileName;
// основное имя файлаfinal
static String filename = "audio_";
// номер файлаFile
temp;static int suffix = 0;final static AudioFileFormat.Type fileType =
AudioFileFormat.Type.WAVE;static boolean running, stopPl, stopCap;static
ByteArrayOutputStream out, save;TargetDataLine line = null;void captureAudio()
{{AudioFormat format = Sound.getFormat();.Info info;= new DataLine.Info(.class,
format);= null;= (TargetDataLine)
AudioSystem.getLine(info);.open(format);.start();= false;= true;runner;= new
Runnable() {bufferSize = (int) format.getSampleRate()
*
format.getFrameSize();buffer[] = new byte[bufferSize];
@Overridevoid
run() {= new ByteArrayOutputStream();= true;{(running) {count =
line.read(buffer, 0, buffer.length);(count > 0) {.write(buffer, 0, count);
}
}.close();
} catch
(IOException e) {.err.println("I/O problems: " + e);.exit(-1);
}
}
};captureThread
= new Thread(runner);.start();
} catch
(LineUnavailableException e) {.err.println("Line unavailable: " +
e);.exit(-2);
}
}void
stopAudio() {= out;.stop();.close();
}static void
chooseFile() {ch = new JFileChooser();.showOpenDialog(null);=
ch.getSelectedFile();
//String
filePath = chFile.getAbsolutePath();
}File
getNewFile() {{{
// новое название файла=
filename + (suffix++)
+
"." + fileType.getExtension();= new File(soundFileName);
} while
(!file.createNewFile());
} catch
(IOException ex) {.exit(-11);
}file;
}void
saveAudio() {
//save =
out;{audio[] = save.toByteArray();input = new
ByteArrayInputStream(audio);AudioFormat format = getFormat();ais = new
AudioInputStream(input, format,.length / format.getFrameSize());.write(ais,
fileType, temp);.close();
} catch
(IOException e) {.err.println("I/O problems: " + e);.exit(-3);
}
}void
playAudio() {{= true;= false;.playSound(temp);
} catch
(IOException ex) {.err.println("I/O problems. File not found. File
problem: ");.exit(-44);
}
}
}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.
*/static
dPhone.Capture.chooseFile;java.io.File;
//package dPhone;
/**
*
* @author Костя
*/class
DPhoneGUI extends javax.swing.JFrame {
/**
* Creates
new form DPhone
*/DPhoneGUI()
{();
}
/**
* 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"> void initComponents() {= new javax.swing.JCheckBoxMenuItem();=
new javax.swing.JLabel();= new javax.swing.JLabel();= new
javax.swing.JButton();= new javax.swing.JButton();= new javax.swing.JButton();=
new javax.swing.JButton();= new
javax.swing.JLabel();.setSelected(true);.setText("jCheckBoxMenuItem1");.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/images/images.jpg")));
//
NOI18N.setText("jLabel1");.setText("jLabel4");(javax.swing.WindowConstants.EXIT_ON_CLOSE);().setLayout(null);.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/images/rec.png"))); //
NOI18N.addActionListener(new java.awt.event.ActionListener() {void
actionPerformed(java.awt.event.ActionEvent evt) {(evt);
}
});().add(recButton);.setBounds(110,
240, 110, 120);.setIcon(new
javax.swing.ImageIcon(getClass().getResource("/images/stop.png")));
// NOI18N.addActionListener(new java.awt.event.ActionListener() {void
actionPerformed(java.awt.event.ActionEvent evt) {(evt);
}
});().add(stopButton);.setBounds(220,
240, 110, 120);.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/chose
file.png"))); // NOI18N.addActionListener(new
java.awt.event.ActionListener() {void
actionPerformed(java.awt.event.ActionEvent evt) {(evt);
}
});().add(choseFile);.setBounds(220,
90, 110, 120);.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/play.png")));
// NOI18N.addActionListener(new java.awt.event.ActionListener() {void
actionPerformed(java.awt.event.ActionEvent evt) {(evt);
}
});().add(playButton);.setBounds(330,
240, 110, 120);.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/Alien
Ink 2560X1600 Abstract Background.jpg"))); //
NOI18N.setBorder(javax.swing.BorderFactory.createLineBorder(new
java.awt.Color(0, 0, 0)));().add(jLabel2);.setBounds(0, 0, 570, 380);();
}//
</editor-fold> void playButtonActionPerformed(java.awt.event.ActionEvent
evt) { .playAudio();
} void
stopButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add
your handling code here:.running = false;(Capture.line.isRunning() &&
!Capture.stopCap && Capture.stopPl) {.stopAudio();
}(Capture.isPlaying()
&& Capture.stopCap && !Capture.stopPl) {.stopSound();
}rec = new
Capture();f = rec.getNewFile();.temp = f;.saveAudio();
} void
choseFileButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add
your handling code here:.chooseFile();
}
/**
* @param
args the command line arguments
*/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 #"865010.files/image006.jpg">
Рисунок 6. Головне вікно програми
діаграма диктофон програмний
Висновок
На даній навчальній практиці були поглиблені
знання з використання StarUML та з розробки діаграм у даному середовищі.
Зокрема, були створені наступні діаграми: варіантів використання, взаємодії,
класів, станів та компонентів. Також були отримані навички з генерування коду
на основі створених діаграм за допомогою StarUML. Код був згенерований на
обєктно-орієнтовній мові програмування Java. Діаграми створювались на основі
програмної системи «Цифровий диктофон», код якої приведений у звіті разом із
згенерованим у StarUML кодом.