Language and framework decision document - Hamster339/Piping-Tool-Java GitHub Wiki
Introduction
This document lays out the decision for which langue and framework to use when developing this project. As stated in the Platform Decision Document, The software will be developed for PC. based on the dev team's experience, three options exist for the choice of programming language. Python, java and c++.
As the decision between languages and frameworks are intertwined, and one cannot be decided without the other, both issues are decided together in this document.
Python, java and c++ have been selected as possible languages based on which languages the dev team is expirienced in.
Python
Advantages:
- Team has the most experience with this language.
- Simple, easy-to-use language.
Disadvantages:
- Not inherently Object-oriented, which the proposed system of tunes and lists would be benefited from.
Python frameworks
From some limited research, the three best possible frameworks for the python programming language are WxPython GUI, PySide GUI and Tkinter.
WxPython GUI
From the Website:
wxPython is a cross-platform GUI toolkit for the Python programming language. It allows Python programmers to create programs with a robust, highly functional graphical user interface, simply and easily. It is implemented as a set of Python extension modules that wrap the GUI components of the popular wxWidgets cross-platform library, which is written in C++.
Advantages:
- Cross-platform on pc, mac and Linux
- The Phoenix version is new and built for simplicity.
- Full Framework, with a variety of features
Disadvantages:
- Less used than others and so has less documentation
- Dev team has no experience
- Less cross-platform abstraction than QT-based frameworks
PySide GUI
From the website:
PySide is a Python binding of the cross-platform GUI toolkit Qt. Applications built with PySide will run on any platform supported by Qt & Python including Windows, OS X, Linux, iOS and Android.
PySide is the official binding for Qt on Python and is now developed by The Qt Company itself. Advantages:
- Modern
- Cross-platform with both pc, mac and Linux, as well as Ios and android.
- Offical python port of Qt, which is a very wide use framework
- Qt-based means cross-platform development is easy
Disadvantages:
- team has no experience
- A lot of unnecessary features
Tkinter
From pythonguis.com:
Tkinter is the defacto GUI framework for Python. It comes bundled with Python on both Windows and macOS. (On Linux, it may require downloading an additional package from your distribution's repo.) Tkinter is a wrapper written around the Tk GUI toolkit.
Advantages:
- team has experience
- Not the whole framework so simpler
- Most commonly used framework
Disadvantages:
- Not whole framework so fewer features
- can look outdated on windows
- Not as cross-platform as the others
Conclusion
The initial choice comes down to between PySide and wxpython on one side, which requires learning a new framework, and Tkinter on the other, which does not. The cross-platform capabilities and modern look of the first two are too good to pass up, so Tkinter must be discounted.
From some quick googling, I find PySide to be slightly better looking than wxPython. This is combined with the fact that PySide has better cross-platform capabilities. The ios and android support mean that the team does not have to learn a new framework if the project were to be transferred to an app as described in the survey analysis document.
Overall, if python was to be chosen as the programming language, Pyside Gui would be the best GUI framework to use.
Java
Advantages:
- OO which would work well with the proposed design
- Great cross platform capibility Disadvantages:
- team has less experience than python
- more complex language
Java Frameworks
Two possible options for a GUI framework for java are JavaFX, Swing and Apache Pivot
JavaFX
Advantages:
- newer version of swing with improvements
- Fully cross-platform
- Touch screen support
- more modern and consistent look.
Disadvantages:
- new so less documentation
Swing
Advantages:
- Lighter weight, which might suit the simplicity of the purposed design
Disadvantages:
- No touch screen support
- Older look
Conclution
For java the choice is clear. JavaFX is developed by oracle itself and is a new version of the previous most-used framework swift. The only differences seem to be improvements. For java, unlike python where the de-facto framework Tkinter is slightly outdated, there appears to be no reason not to choose the java de facto GUI framework JavaFX for this project, if java is to be chosen as the language.
C++
Advantages:
- C-based languages have high control over low-level functions.
- Efficient
Disadvantages:
- Mainly used for system programming
- platform dependent
- team has little experience
- Higher complexity
c++ Frameworks
wxWidgets
Advantages:
- Open source with no licence requirements
Disadvantages:
- Widgets don't look native on any system.
QT
Advantages:
- More advanced features.
Disadvantages:
- Requires licence if used for proprietary software.
conclution
In terms of a framework for C++, Qt seems to be a better choice. Licensing isn't an issue as this project is decidedly open source and Qt seems to have a better look.
Final Decision
To begin, C++ can be discounted. The increased efficiency and control it brings are not needed in this project. c++ is generally more used for systems programming than application development. Java and python far outclass c++ in terms of suitability for this project.
Given the choice between Java and Python, Java edges ahead. Its OO nature makes it more suitable than python for this project, and its platform independents will hemp when adding Linx and mac support to the project later. Additionally, the officially supported JavaFX seems a great GUI framework.