0% found this document useful (0 votes)
23 views73 pages

Chapter I - Introduction To Software Design

The document provides an introduction to software design by discussing what software and design are, defining what software design is, describing the two major types of software, and explaining key concepts like system software, operating systems, utility programs, device drivers, and language translators.

Uploaded by

lloyd yusores
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views73 pages

Chapter I - Introduction To Software Design

The document provides an introduction to software design by discussing what software and design are, defining what software design is, describing the two major types of software, and explaining key concepts like system software, operating systems, utility programs, device drivers, and language translators.

Uploaded by

lloyd yusores
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 73

INTRODUCTION TO

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.

2 MAJOR TYPES of SOFTWARE


Application Software System Software
WHAT IS A SOFTWARE
WHAT IS A SOFTWARE

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

SPECIALIZED APPLICATION SOFTWARE


- let users perform advanced computing tasks.
- Competent end users need to be aware of specialized applications.

Examples of Specialized apps


 Graphics
 Audio and Video
 Multimedia
 Web Authoring
 A.I.
• Desktop publishing
• Image editors
• Illustration programs
• Image galleries
• Graphic suites
 Video editing software  Popular Programs
• Reorganize • Apple iMovie
• Add effects • Windows Movie Maker
 Audio editing software  Popular Programs
• Create and edit audio clips • Apple Garage Band
• Filter out imperfections • Sony ACID
• Make MP3s
• Capture, edit, and produce videos
• Create a DVD or upload to YouTube
• The integration of a variety of media into one presentation
• Video
• Music
• Voice
• Graphics
• Text
• Include user interactivity
• Create multimedia presentations
• Bring together video, audio, graphics, and text elements
into interactive framework
• Popular programs
• Adobe Director
• Toolbook
• Creating a web site
• Corporations use the Web to reach new customers
• Individuals create their own personal sites, called blogs
• Web Site Design
• Web Authoring Programs
• Attempts to simulate human senses, thought processes, and
actions
• Reasoning
• Learning from past experience
• Vision
• Touch
• Help people and organizations
become more productive
• Three areas of AI
• Virtual reality
• Knowledge-based (expert) systems
• Robotics
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

• MS-DOS 1981 • Windows 7 (Oct. 2009) end of support


• Windows 1.0 - 2.0 (1985-1992) as 0f 2020
• Windows 3.0 – 3.1 (1990-1994) • Windows 8 (Aug. 1 2009)
• Windows 95 (Aug. 1995) • Windows 10 ( July, 2015
• Windows 98 (June 1998) • Windows Server ( Mar. 2003)
• Windows ME - Millennium Edition (Sept. 2000) • Windows Home Server ( Jan. 2007)
• Windows NT 31. - 4.0 (1993-1996) • Windows CE (Nov. 2006)
• Windows 2000 (Feb. 2000) • Windows Mobile (April 2000)
• Windows XP (Oct. 2001) • Windows Phone 7-10 (Nov. 2010)
• Windows Vista (Nov. 2006)
Return
MACINTOSH OS
is an operating system (OS) designed by Apple Inc. to be installed and operated on the Apple
Macintosh series of computers. Introduced in 1984.

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).

2 TYPES OF DEVICE DRIVERS


• Kernel Device Drivers
• User Device Drivers
• Virtual Device Drivers
DEVICE SOFTWARE
Kernel device drivers
- load with the OS as part of the system's memory.

User Mode Device Drivers


- provide a dedicated API at a user level to interrupt memory management, avoiding the
problems found in kernel device drivers.
-are triggered by the end-user.

Virtual Device Drivers


-interface with the Windows Virtual Machine Manager.
They are used to maintain the status of a hardware device that has changeable settings and to
emulate a hardware device in virtualization environments.
LANGUAGE TRANSLATOR

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:

• The process via which software is designed (AKA "Design").


• Figuring out what functionality a software system should have.
• Figuring out how to structure the software that implements the
functionality.
• The result of the design process (AKA "The Design").
• The decided functionality itself.
• The decided structure of the implementation.
software design related phenomena in the following conceptual model:
All in all, this 2 x 2 matrix results in these four phenomena:

• The functional design process.


• The functional specification.
• The structural design process.
• The structural design.
• a big part of the structural design is
decided based on non-functional
design goals, such as increased
development speed, decreased
development costs or other non-
functional software qualities such as
performance, reliability,
scalability etc. The diagram shows
how software design is performed in
practice.
FUNCTION IS ABSTRACT - STRUCTURE IS CONCRETE

the functional specification is abstract, whereas the


structural design is concrete. Put differently, the
functional specification only tells in abstract
terms what functionality should be implemented, and the
structural design says in concrete terms how that
functionality is to be implemented.
FUNCTION IS ABSTRACT - STRUCTURE IS CONCRETE

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)

Opposite to ADT .They are


direct implementations of a
relatively simple concept. It
does not hide anything.
SOFTWARE DESIGN VS. SOFTWARE ARCHITECTURE
Software design is about the structure of software within a single
process. In other words, the structure of your code within a single
application or service etc.

Software architecture is about the structure of all the processes that


make up a system, including their roles, interactions, protocols, data
exchange protocols etc. In other words, software architecture is about
the structure of two or more processes (applications or services)
including their interactions, communication protocol etc.
In short, software design deals with the lower level details and software architecture
deals with the higher level details (the big picture) - according to distinction. The
following diagram attempts to illustrate this distinction:
DESIGN CHOICES ARE TRADE-OFFS

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,

if the advantage (pro) of a design option was higher performance,


but performance is not an issue in your situation, then that pro is not
relevant in your concrete situation.
• The diagram below shows only two options, but quite often there can be several more
options than two.
DESIGN CHOICES ARE TRADE-
OFFS
In other words, there are no "right" or "wrong" designs. The benefit of a
given design option depends on the software you want to apply it to. It may
be a good option for system A, a so-so option system B and a bad option for
system C.

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?

There are several software design philosophies out there to implement.


DESIGN PHILOSOPHIES
Here are some of the most well-known software design philosophies:
• Structured Programming
• Object Oriented Programming
• Functional Programming
• Data Oriented Programming
• Aspect Oriented Programming
• SOLID
DESIGN PHILOSOPHIES
Structured Programming
• the program is made as a single
structure. It means that the code
will execute the instruction by
instruction one after the other. It
doesn’t support the possibility of
jumping from one instruction to
some other with the help of any
statement like GOTO, etc.
DESIGN PHILOSOPHIES
OOP
• The program is written as a
collection of classes and
objects which are meant for
communication
Advantages:
• Data security
• Code reusability
• Flexible
DESIGN PHILOSOPHIES

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

• is a technique for building common, reusable routines


that can be applied applicationwide.
• During development this facilitates separation of core
application logic and common, repeatable tasks (input
validation, logging, error handling, etc.).
DESIGN PHILOSOPHIES
Aspect-Oriented Programming
DESIGN PHILOSOPHIES
SOLID

SOLID stands for:


• S - Single-responsiblity Principle
• O - Open-closed Principle
• L - Liskov Substitution Principle
• I - Interface Segregation Principle
• D - Dependency Inversion Principle
DESIGN PHILOSOPHIES
SOLID
Single-Responsibility Principle
• A class should have one and only one reason to change,
meaning that a class should have only one job.
• For example, consider an application that takes a collection of
shapes—circles, and squares—and calculates the sum of the
area of all the shapes in the collection.
DESIGN PHILOSOPHIES
SOLID
Open-close Principle

• Objects or entities should be open for extension but closed for


modification.
• This means that a class should be extendable without
modifying the class itself.
DESIGN PHILOSOPHIES
SOLID
Liskov Substition Principle

• This means that every subclass or derived class should


be substitutable for their base or parent class.
DESIGN PHILOSOPHIES
SOLID
Interface Segregation Principle

• A client should never be forced to implement an interface that it


doesn’t use, or clients shouldn’t be forced to depend on
methods they do not use.
DESIGN PHILOSOPHIES
SOLID
Dependency Inversion Principle

• This principle allows for decoupling

• Entities must depend on abstractions, not on concretions. It


states that the high-level module must not depend on the low-
level module, but they should depend on abstractions.
SOFTWARE DESIGN GOALS
Functional Goals
Non-functional Goals
• Software Quality
• Development Speed
• Development Cost
• Operational Cost
Other Goals
• Legal Requirements
• Personal Goals
• Other Goals
SOFTWARE DESIGN GOALS

Here are the same software design goals illustrated in a diagram:


SOFTWARE DESIGN GOALS
Derived:
END OF CHAPTER I…..

You might also like