Файл: «История и развитие методологии объектно-ориентированного программирования. Сферы применения».pdf
Добавлен: 21.05.2023
Просмотров: 335
Скачиваний: 3
СОДЕРЖАНИЕ
1. ИСТОРИЧЕСКИЕ АСПЕКТЫ ВОЗНИКНОВЕНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И ООП
1.1. Исторические предпосылки создания языков программирования и методологий программирования
1.2. Классификация и специфика языков программирования высокого уровня
2. СПЕЦИФИКА МЕТОДОЛОГИИ ООП В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
2.2 Анализ современных языков программирования, базирующихся на методологии ООП
3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ИСПОЛЬЗОВАНИЕМ ООП
3.1 Разработка проекта системы и ее основных классов
Рисунок 16 – Интерфейс вкладки «Склады» разработанной системы
Рисунок 17 – Диалоговое окно для выбора пути экспорта данных
Результат экспорта данных по соответствующей таблице в табличного редактора MS Excel показано на рис. 18. Эта возможность предусмотрена для всех таблиц
Рисунок 18 – Результат экспорта данных по соответствующей таблице в табличного редактора MS Excel
Интерфейс вкладки «Упаковать» разработанной системы показан на рис. 19.
Рисунок 19 – Інтерфейс вкладки «Упакувати» розробленої системи
В данной вкладке происходит упаковка грузов по контейнерам и визуализация. В первом пункте «Добавить товары» с помощью кнопок с левой таблицы в правую можно переместить товары, определив их количество.
Также надо определить цвет, который будет использован при визуализации.
Пример добавления товаров для упаковки показано на рис. 20. Из списка с выбранными товарами можно удалить товары, если они выбраны ошибочно.
Предусмотрено отключение кнопок, которые нельзя выбрать, работая с одной из частей.
Во втором пункте можно выбрать контейнеры, которые желательны или полностью передать выбор алгоритма программы, выбрав флажок.
После окончательного выбора товаров и контейнеров надо нажать кнопку «Рассчитать».
Тогда появляется 3D-визуализация контейнера. С помощью слайдеров можно поворачивать модель, как показано на рисунке 21.
Пример визуального размещения товаров в контейнере показано на рисунке 22.
Рисунок 21 – Пример добавления товаров для упаковки
Рисунок 22 – Пример визуального размещения товаров в контейнере
Выводы по главе 3
В рамках данной главы рассмотрена разработка проектной и программной частей системы распределения грузов. Программная реализация выполнена с использованием базирующегося на ООП методологии языка программирования Java для закрепления основных изученных теоретических нюансов, принципов и положений. В качестве средств реализации были использованы язык Java, среда разработки NetBeans, библиотека JavaFX.
Выполнение данной главы позволило практически закрепить знания и получить полезные навыки в использовании методологии ООП для решения конкретных задач.
ЗАКЛЮЧЕНИЕ
В рамках первой главы проведен анализ ряда литературных источников по существующим языкам программирования и методологиям написания программ. Даны определения терминов: языки программирования, высокоуровневый язык программирования. Рассмотрены исторические аспекты возникновения языков программирования и объектно-ориентированной методологии разработки программного обеспечения. Рассмотрена классификация и специфика языков программирования высокого уровня в их историческом разрезе. Приведено генеалогическое дерево их исторического развития с 1960 по 2000 годы. Приведена диаграмма востребованности современных языков программирования на практике.
В рамках второй главы описана специфика методологии ООП в современных языках программирования, реализующих данную парадигму разработки программного обеспечения. Приведены определения и иллюстрации, поясняющие принципы инкапсуляции, наследования и полиморфизма, а также принцип абстракции. Описаны функциональные возможности и преимущества объектно-ориентированных языков программирования Java, C# и Python, как наиболее распространенных на практике в современной разработке.
В рамках третьей главы рассмотрена разработка проектной и программной частей системы распределения грузов. Программная реализация выполнена с использованием базирующегося на ООП методологии языка программирования Java для закрепления основных изученных теоретических нюансов, принципов и положений. В качестве средств реализации были использованы язык Java, среда разработки NetBeans, библиотека JavaFX. Выполнение данной главы позволило практически закрепить знания и получить полезные навыки в использовании методологии ООП для решения конкретных задач.
Таким образом можно утверждать, что поставленная задача данной работы является выполненной в полном объеме. В процессе выполнения работы были решены следующие поставленные задачи
- Проведен обзор исторических предпосылок создания языков и методологий программирования.
- Проведена классификация и описание специфики языков программирования высокого уровня.
- Выполнен анализ основных принципов и сущности методологии ООП.
- Проведен анализ возможностей современных языков программирования, которые основаны на реализации ООП парадигмы.
- Разработано программное обеспечение на базе использования ООП.
Следует отметить, что ООП является мощной и перспективной методологией, применяющейся на практике для решения самых разнообразных задач программирования. Знание ООП требуются при трудоустройстве практически в любой компании на должность инженера-программиста или разработчика программного обеспечения, что обуславливает важность и актуальность изучения данной тематики.
БИБЛИОГРАФИЯ
- Голицына О.Л., Партыка Т.Л., Попов И.И. Языки программирования Учебное пособие. – М.: Форум, 2011. – 400 с.
- Забудский Е.И. Объектно-ориентированный анализ и программирование на языке C# — М.: Кафедра ОИиППО ГУ-ВШЭ, 2012. — 705 с.
- Камаев В.А., Костерин В.В. Технологии программирования. – М.: Высш. шк., 2006. – 454 с.
- Лафоре Р. Структуры данных и алгоритмы в Java. Классика Computers Science.— СПб.: Питер, 2013. — 704 с.
- Могилев А.В., Листрова Л.В. Методы программирования. Компьютерные вычисления. – СПб.: БХВ-Петербург, 2013. — 320 с.
- Монахов В.В. Язык программирования Java и среда NetBeans. – СПб.: БХВ-Петербург, 2011. – 704 с.
- Нейгел К., Ивьен Б., C# 5.0 и платформа .NET 4.5 для профессионалов. М.: Академия, 2014. – 1440 с.
- Нимейер П. Программирование на Java. – Москва: Эксмо, 2014. – 1216 с.
- Орлов С.А. Теория и практика языков программирования. – СПб.: Питер, 2014. – 690 с.
- Пратт Т. Языки программирования. Разработка и реализация. – М.: Мир, Москва, 2011. – 574 с.
- Портянкин И. Swing. Эффективные пользовательские интерфейсы. СПб.: Питер, 2010 . – 337 с.
- Рихтер Д. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. – СПб.: Питер, 2012. – 720 с.
- Себеста Р. Основные концепции языков программирования. Concepts of Programming Languages. – М.: Эксмо, 2011. – 512 с.
- Седжвик Р., Уэйн К.. Алгоритмы на Java. – М.: ООО “И.Д. Вильямс”, 2013. – 848 с.
- Сьерра К. Изучаем Java. – М.: Эксмо, 2014. – 708 с.
- Синицын С. Программирование на языке высокого уровня. – СПб.: Академия, 2011. – 400 с.
- Тюгашев А.А.. Основы программирования. – СПб.: Университет ИТМО, 2016. – 160 с.
- Хахаев И. А. - Практикум по алгоритмизации и программированию. – М.: Альт Линукс, 2010. – 126 с.
- Хорстманн С., Корнелл Г. Java. Библиотека профессионала. – М.: ООО “И.Д. Вильямс”, 2014. – 864 с.
- Шилдт Г. Java. Полное руководство, 8-е изд. – М.: ООО “И.Д. Вильямс”, 2012. – 1104 с.
- Шилдт Г. Swing: руководство для начинающих. – М.: ООО “И.Д. Вильямс”, 2011. – 704 с.
- Эванс Б., Вербург М. Java. Новое поколение разработки. – СПб.: Питер, 2014. — 560 с.
- Эккель Б. Философия Java. – СПб.: Питер, 2015. – 1168 с.
ПРИЛОЖЕНИЕ
Data.java
package main;
import java.util.Iterator;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import org.hibernate.Query;
import org.hibernate.Session;
/**
*
* @author Aline
*/
@ManagedBean
@SessionScoped
public class Data implements AutoCloseable{
private final Session session;
public Data(){
session = HibernateUtil.getSessionFactory().openSession();
}
public List loadGoodsList(){
return session.createCriteria(Goods.class).list();
}
public List loadContainersList(){
return session.createCriteria(Containers.class).list();
}
public List loadStoresList(){
return session.createCriteria(Stores.class).list();
}
public List loadListofgoods(int number){
session.beginTransaction();
Query query = session.createQuery("from Listofgoods where idContainer = :number");
query.setParameter("number", number);
List l = query.list();
Iterator<Listofgoods> it = l.iterator();
while (it.hasNext()) {
Listofgoods tmp = it.next();
query = session.createQuery("select g.name from Goods g where g.idGood = :idGood");
query.setParameter("idGood", tmp.getIdGood());
if (!query.list().isEmpty()) tmp.setName(query.list().get(0).toString());
}
session.getTransaction().commit();
return l;
}
public List loadTypesList(){
session.beginTransaction();
Query query = session.createQuery("SELECT t.type FROM Types t");
session.getTransaction().commit();
return query.list();
}
public List loadStoreTypesList(int idStore){
session.beginTransaction();
Query query = session.createQuery("SELECT t.type FROM Listoftypes l, Types t WHERE t.idType = l.idType and l.idStore = :id");
query.setParameter("id", idStore);
session.getTransaction().commit();
return query.list();
}
public List loadContainertypesList(){
session.beginTransaction();
Query query = session.createQuery("SELECT c.containertype FROM Containertype c");
session.getTransaction().commit();
return query.list();
}
public void addGood(Goods g){
session.beginTransaction();
session.save(g);
session.getTransaction().commit();
}
public int addContainer(Containers c){
session.beginTransaction();
session.save(c);
session.getTransaction().commit();
return c.getIdContainer();
}
public void addStore(Stores s){
session.beginTransaction();
session.save(s);
session.getTransaction().commit();
}
public void deleteGood(int id){
session.beginTransaction();
session.delete(session.get(Goods.class, id));
session.getTransaction().commit();
}
public void deleteContainer(int id){
session.beginTransaction();
session.delete(session.get(Containers.class, id));
session.getTransaction().commit();
}
public void deleteStore(int id){
session.beginTransaction();
session.delete(session.get(Stores.class, id));
session.getTransaction().commit();
}
public void updateGood(Goods g){
session.beginTransaction();
session.update(g);
session.getTransaction().commit();
}
public void updateStore(Stores s){
session.beginTransaction();
session.update(s);
session.getTransaction().commit();
}
@Override
public void close(){
session.close();
HibernateUtil.getSessionFactory().close();
}
}
HibernateUtil.java
package main;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.SessionFactory;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from standard (hibernate.cfg.xml)
// config file.
sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Log the exception.
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Main.java
package main;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
public class Main extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setTitle("Система разделения грузов");
stage.setScene(scene);
stage.show();
stage.setOnCloseRequest(new EventHandler<WindowEvent>() {
@Override
public void handle(WindowEvent t) {
Platform.exit();
System.exit(0);
}
});
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Logic.java
package main;
import java.util.List;
import javafx.scene.paint.Color;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Box;
import javafx.scene.shape.DrawMode;
/**
*
* @author Aline
*/
class Element{
String name;
double mass;
int width, height, depth;
String contType;
String colour;
int variants;
int x = 1000000, y = 1000000, z = 1000000;
public Element(String name, double mass, int width, int depth, int height, String contType, String colour){
this.name = name;
this.mass = mass;
this.width = width;
this.height = height;
this.depth = depth;
this.contType = contType;
this.colour = colour;
}
}
public class Logic {
Element[] elements;
int contHeight = 300;
int contDepth = 300;
int contWidth = 300;
int[][][] container = new int[contHeight][contDepth][contWidth];
public void start(List list){
int tmp = 0;
for(int i = 0; i < list.size(); i++){
tmp += Integer.parseInt(list.get(i).toString().split(", ")[1].split(" ")[0]);
}
elements = new Element[tmp];
int k = 0;
for(int i = 0; i < list.size(); i++){
String[] temp = list.get(i).toString().split(", ");
String[] temp2 = temp[3].split("x");
for(int j = 0; j < Integer.parseInt(temp[1].split(" ")[0]); j++)
elements[k++] = new Element(temp[0], //name
Double.parseDouble(temp[2].split(" ")[0]), //mass
Integer.parseInt(temp2[0]), //width
Integer.parseInt(temp2[1]), //depth
Integer.parseInt(temp2[2]), //height
temp[4], //contType
temp[5]); //colour
}
setVariants();
sort();
pack();
}
public void setVariants(){
for (Element element : elements) {
int variantsPlacement = 0;
if(element.width <= contWidth && element.height <= contHeight && element.depth <= contDepth)
variantsPlacement++;
if(element.width <= contWidth && element.depth <= contHeight && element.height <= contDepth)
variantsPlacement++;
if(element.height <= contWidth && element.width <= contHeight && element.depth <= contDepth)
variantsPlacement++;
if(element.height <= contWidth && element.depth <= contHeight && element.width <= contDepth)
variantsPlacement++;
if(element.depth <= contWidth && element.height <= contHeight && element.width <= contDepth)
variantsPlacement++;
if(element.depth <= contWidth && element.width <= contHeight && element.height <= contDepth)
variantsPlacement++;
element.variants = variantsPlacement;
}
}
public void sort(){
boolean swapped = true;