Chapter I - Introduction To Software Design
Chapter I - Introduction To Software Design
SOFTWARE DESIGN
PREFACE
• What is Software?
• What is Design?
• What is Software Design?
WHAT IS A SOFTWARE
• is a set of instructions, data or programs used to operate computers and execute specific
tasks.
• A generic term used to refer to applications, scripts and programs that run on a device.
APPLICATION SOFTWARE
• Is a program or a group of programs designed for end users.
• Also referred to as non-essential software. They are installed and operate on computer-based
on the user’s requirements.
e.g.
MS Office- bundled type apps
Photoshop – photo editing(specialized)
Skype- online comms
WHAT IS A SOFTWARE
WHAT IS A SOFTWARE
WHAT IS A SOFTWARE
SYSTEM SOFTWARE
is a type of computer program that is designed to run a computer’s hardware and
application programs.
the system software is the interface between the hardware and user applications.
e.g.
- Operating System
- Utility Software
- Device Software
- Language Translator
OS LAYERED MODEL
OPERATING SYSTEM
MICROSOFT WINDOWS
is a group of OSs manufactured by Microsoft. Windows is available in 32 and 64-bit
versions and offers a graphical user interface (GUI), multitasking functionalities, virtual
memory management capabilities, and support for several peripheral devices.
Return
MICROSOFT WINDOWS
it is a graphical user interface (GUI) based OS that has since been released as multiple
different versions.
considered the pioneer of GUI based operating systems, as it was launched when MS-DOS
was the industry standard.
Return
MACINTOSH OS
Versions :
• -MacOS 10.14: Mojave- 2018
• MacOS 10.13: High Sierra- 2017
• MacOS 10.12: Sierra- 2016
• OS X 10.11: El Capitan- 2015
• OS X 10.10: Yosemite-2014
• OS X 10.9 Mavericks-2013
• OS X 10.8 Mountain Lion- 2012
• OS X 10.7 Lion- 2011
• OS X 10.6 Snow Leopard- 2009
• OS X 10.5 Leopard- 2007 Return
ANDROID OS
is a mobile operating system that was developed by Google (GOOGL) to be primarily used
for touchscreen devices, cell phones, and tablets.
Its design lets users manipulate the mobile devices intuitively, with finger movements that
mirror common motions, such as pinching, swiping, and tapping.
Return
ANDROID OS
• Android 1.5: Android Cupcake • Android 4.4 to 4.4.4: Android KitKat
• Android 1.6: Android Donut • Android 5.0 to 5.1.1: Android Lollipop
• Android 2.0: Android Eclair • Android 6.0 to 6.0.1: Android Marshmallow
• Android 2.2: Android Froyo • Android 7.0 to 7.1: Android Nougat
• Android 2.3: Android Gingerbread • Android 8.0 to Android 8.1: Android Oreo
• Android 3.0: Android Honeycomb • Android 9.0: Android Pie
• Android 4.0: Android Ice Cream Sandwich
• Android 4.1 to 4.3.1: Android Jelly Bean
Return
LINUX OS
is the best-known and most-used open source operating Versions
system.
- Ubuntu
As an operating system, Linux is software that sits underneath
all of the other software on a computer, receiving requests from - Arch Linux
those programs and relaying these requests to the computer’s - Fedora
hardware. - SUSE Linu
- Ubuntu
- Mandiva
- Sabayon
- Kali
Return
UTILITY
PROGRAMS
is software designed to help to analyze, configure, optimize or maintain a computer.
It is used to support the computer infrastructure - in contrast to application software, which
is aimed at directly performing tasks that benefit ordinary users.
UTILITY PROGRAMS
TYPES OF UTILITY SOFTWARE
• File Viewer.
• File Compressor.
• Diagnostic Utilities.
• Disk Scanner.
• Antivirus.
• Disk Defragmenter.
• Backup Utility.
• Data Recovery Utility.
DEVICE SOFTWARE
is a software program that controls a particular type of hardware device that is attached to a
computer.
A device driver essentially allows smooth communication between a connected hardware
device and the operating system (OS).
a programming language processor that converts a computer program from one language to
another.
It takes a program written in source code and converts it into machine code. It discovers and
identifies the error during translation.
TYPES of TRANSLATORs
• Compiler
• Interpreter
• Assembler
LANGUAGE TRANSLATOR
LANGUAGE TRANSLATOR
Compiler
• is a translator used to convert high-level programming language to low-level programming
language. It converts the whole program in one session.
Interpreter
• Same function of a compiler but its converts the program one at a time.
Assembler
• is a translator used to translate assembly language to machine language.
EXAMPLE OF ASM LANG.
WHAT IS SOFTWARE DESIGN?
•What is Software Design?
•Functional Design vs. Structural Design
• Function is Abstract - Structure is Concrete
•Software Design vs. Software Architecture
•Design Choices Are Trade-offs
•How Do We Design Software, Then?
•Beware of Design Doctrines
•Software Design Goals
WHAT IS SOFTWARE DESIGN?
• When people talk about software design they typically refer to one or
more of the following phenomena:
EXAMPLE:
-ABSTRACT DATA
TYPES (ADT)
FUNCTION IS ABSTRACT - STRUCTURE IS CONCRETE
FUNCTION IS ABSTRACT - STRUCTURE IS CONCRETE
EXAMPLE:
-ABSTRACT DATA
TYPES (ADT)
FUNCTION IS ABSTRACT - STRUCTURE IS CONCRETE
EXAMPLE:
-CONCRETE DATA
TYPES (CDT)
Since software design is about deciding how to structure your code - software
design is about making design choices between different design options.
Each design option has its own pros and cons. Thus, making a decision
between different the different design options means making a trade-off
between the pros and cons of the various design options.
DESIGN CHOICES ARE TRADE-OFFS
The pros and cons of a design option may or may not be relevant in
your particular system and / or situation. For instance,
a disadvantage (con) of a design option could be lower performance
- but if performance is not an issue in your situation - that
disadvantage is not relevant in your concrete situation. Similarly,
Furthermore, the evaluation of design option pros and cons may change over
time. Imagine you are developing a SaaS solution. Aspects such as
performance and scalability may not be a big issue early in the process, when
the system only has a few hundred users. But once the system has millions of
users, all of a sudden performance and scalability start to matter more.
HOW DO WE DESIGN SOFTWARE, THEN?
Now that we have a good idea about what software design is about -
which is figuring out what functionality to implement and how to
structure the implementation - how do we go about actually doing that?
Functional Programming
• is a way of writing applications using only pure
functions and immutable values. In this, a function
has no side-effect. This helps find bugs easily and
helps to know what the function will perform,
finding the error
Functional Programming DESIGN PHILOSOPHIES
DESIGN PHILOSOPHIES
Data-Oriented Programming
• is a software engineering approach and mindset that
focuses on data as the central point of any application.
• Basically, DOD programming prioritizes efficient data
organization, performance optimization, and scalability.
• Records, sealed classes, and pattern matching are
designed to work together to support data-oriented
programming
DESIGN PHILOSOPHIES
Data-Oriented Programming
DESIGN PHILOSOPHIES
DESIGN PHILOSOPHIES
Aspect-Oriented Programming