CS701
CS701
UNIT - 1
4. Software Architecture
a. Software Architecture is the blueprint of building software. It shows the overall structure of
the software, the collection of components in it, and how they interact with one another
while hiding the implementation. This helps the software development team to clearly
communicate how the software is going to be built as per the requirements of customers.
c. Microservices:
i. Emerged as a remedy to many difficulties faced in all Monolithic architectures. As the
microservices are decoupled, they could scale more easily. The main disadvantage in a
classical Microservices architecture is a dependency between synchronized service
calls.
ii. So adding new features and modifying existing microservices without affecting other
microservices are no longer a challenge when an application is built in a microservices
pattern.
iii. Example: Netflix is one of the most popular examples of software built-in
microservices architecture. This pattern is most suitable for websites and web apps
having small components.
d. Serverless architecture: Serverless is getting more and more popular, being adopted from a
large number of companies. Serverless computing is a new paradigm that provides a
platform to efficiently develop and deploy applications to the market without having to
manage any underling infrastructure
b. Connectors: The different components of a system are likely to interact while the system is
in operation to provide the services expected of the system. After all, components exist to
provide parts of the services and features of the system, and these must be combined to
deliver the overall system functionality.
b. Client-Server Pattern
i. This pattern consists of two parties; a server and multiple clients. The server
component will provide services to multiple client components. Clients request
services from the server and the server provides relevant services to those clients.
Furthermore, the server continues to listen to client requests.
ii. Usage: Online applications such as email, document sharing and banking.
c. Pipe-filter pattern
i. This pattern can be used to structure systems which produce and process a stream of
data. Each processing step is enclosed within a filter component. Data to be processed
is passed through pipes. These pipes can be used for buffering or for synchronization
purposes.
ii. Usage:
1. Compilers. The consecutive filters perform lexical analysis, parsing, semantic
analysis, and code generation.
2. Workflows in bioinformatics.
d. Master-slave pattern
i. This pattern consists of two parties; master and slaves. The master component
distributes the work among identical slave components, and computes a final result
from the results which the slaves return.
ii. Usage:
1. In database replication, the master database is regarded as the authoritative
1. In database replication, the master database is regarded as the authoritative
source, and the slave databases are synchronized to it.
2. Peripherals connected to a bus in a computer system (master and slave drives).
e. Microservices Pattern
i. The collection of small services that are combined to form the actual application is the
concept of microservices pattern. Instead of building a bigger application, small
programs are built for every service (function) of an application independently. And
those small programs are bundled together to be a full-fledged application.
ii. So adding new features and modifying existing microservices without affecting other
microservices are no longer a challenge when an application is built in a microservices
pattern.
iii. Example Netflix is one of the most popular examples of software built-in
microservices architecture. This pattern is most suitable for websites and web apps
having small components.
UNIT - 2
UNIT - 2
2. Architectures styles:
a. Dataflow architecture
i. Dataflow architecture is a computer architecture that directly contrasts the traditional
von Neumann architecture or control flow architecture.
ii. Dataflow architectures have no program counter, in concept: the executability and
execution of instructions is solely determined based on the availability of input
arguments to the instructions.
iii. Although no commercially successful general-purpose computer hardware has used a
dataflow architecture, it has been successfully implemented in specialized hardware
such as in digital signal processing, network routing, graphics processing, telemetry,
and more recently in data warehousing, and artificial intelligence.
iv. In a data flow machine, a program consists of data flow nodes. A data flow node fires
(fetched and executed) when all its inputs are ready i.e. when all inputs have tokens
v. Data flow node
d. Data-centered architecture
i. In data-centered architecture, the data is centralized and accessed frequently by
other components, which modify data. The main purpose of this style is to achieve
integrality of data. Data-centered architecture consists of different components that
communicate through shared data repositories. The components access a shared data
structure and are relatively independent, in that, they interact only through the data
store.
ii. In this architectural style, new components corresponding to clients can be added and
existing components can be modified easily without taking into account other clients.
This is because client components operate independently of one another.
iii. There are two types of components:
A central data structure or data store or A data accessor or a collection of
A central data structure or data store or A data accessor or a collection of
data repository, which is responsible for independent components that operate on
providing permanent data storage. It the central data store, perform
represents the current state. computations, and might put back the
results.
iv. Some advantages of the data-centered architecture are listed below:
1. Clients operate independently of one another.
2. Data repository is independent of the clients.
3. It adds scalability (that is, new clients can be added easily).
4. It supports modifiability.
e. Layered architecture
i. Layered architectures are said to be the most common and widely used architectural
framework in software development. It is also known as an n-tier architecture and
describes an architectural pattern composed of several separate horizontal layers that
function together as a single unit of software. A layer is a logical separation of
components or code.
ii. In these frameworks, components that are related or that are similar are usually
placed on the same layers. However, each layer is different and contributes to a
different part of the overall system.
iii. Components of a Layered Architecture:
Presentation Layer responsible for user interactions with the
software system
Application/Business Layer handles aspects related to accomplishing
functional requirements
Domain Layer responsible for algorithms, and programming
components
Infrastructure/Persistence/Data esponsible for handling data, databases
base Layer
iv. One common example of this architectural style is OSI-ISO (Open Systems
iv. One common example of this architectural style is OSI-ISO (Open Systems
Interconnection-International Organisation for Standardisation) communication
system.
Advantages Disadvantages
The framework is simple and easy to Scalability is difficult because the
learn and implement. structure of the framework does not
allow for growth.
v. Cost overheads are fairly low. Parallel processing is not possible.
Testing is easier because of the separated They can be difficult to maintain. A
components change in a single layer can affect the
entire system because it operates as a
single unit.
h. Reactive Architecture
i. Reactive systems architecture is a computer systems paradigm that takes advantage
of the responsiveness, flexibility and resiliency offered in reactive programming so
that various components (e.g., software applications, databases and servers) can
continue to function and even thrive if one of the components is compromised.
ii. Reactive Systems, in a nutshell, is an Architectural and Design pattern of building large
scale, responsive, resilient, self-healing systems where individual components talk to
each other over non-blocking Asynchronous Messaging.
iii. There are 4 principles in the context of Reactive Systems:
• Responsive : The system has to respond quickly to all users under all conditions.
• Resilient: The system stays responsive in the face of failure.
• Elastic: The system should provide responsiveness, despite increases(or
decreases) in load. Scaling up provides responsiveness during peak, while scaling
decreases) in load. Scaling up provides responsiveness during peak, while scaling
down improves cost effectiveness.
• Message Driven: Reactive Systems rely on asynchronous message-passing to
establish a boundary between components that ensures loose coupling,
isolation and location transparency.
UNIT - 3
UNIT - 3
2. Struts
a. Apache Struts is an elegant, extensible framework for creating enterprise-ready Java web
applications. This framework is designed to streamline the full development cycle from
building, to deploying and maintaining applications over time. Struts are thoroughly useful
in building J2EE (Java 2 Platform, Enterprise Edition) applications because struts takes
advantage of J2EE design patterns.
b. Struts depend on the MVC (Model View Controller) framework.
c. Model View Controller or MVC as it is popularly called, is a software design pattern for
developing web applications. A Model View Controller pattern is made up of the following
three parts −
Model The lowest level of the pattern which is responsible for maintaining data.
View This is responsible for displaying all or a portion of the data to the user.
Controller Software Code that controls the interactions between the Model and View.
d. Struts has the following features:
i. Struts is almost simple, so easy to learn and use.
ii. Struts is very well integrated with J2EE.
iii. Struts has large user community.
iv. It takes much of the complexity out as instead of building your own MVC framework,
you can use struts.
v. It is flexible and extensible, it is easy for the existing web applications to adapt the
struts framework.
3. Hibernate
a. Hibernate is a java based ORM tool that provides a framework for mapping application
domain objects to the relational database tables and vice versa.
b. Hibernate is an open-source, non-invasive, light-weight java ORM(Object-relational
mapping) framework to develop objects which are independent of the database software
and make independent persistence logic in all JAVA, JEE
c. It is a java framework which is used to develop persistence logic. Persistence logic means to
store and process the data for long use.
d. Hibernate has a layered architecture which helps the user to operate without having to
know the underlying APIs. Hibernate makes use of the database and configuration data to
provide persistence services (and persistent objects) to the application.
e. How does Hibernate relate to JDBC?
Hibernate uses JDBC for all database communications. Hibernate uses JDBC to interact with
the database. Hibernate acts as an additional layer on top of JDBC and enables you to
implement a database-independent persistence layer:
f. Architecture
g. Advantages of Hibernate:
i. Hibernate eliminates all the boiler-plate code that comes with JDBC
ii. Hibernate provides a powerful query language (HQL) that is similar to SQL.
iii. Hibernate is an open-source project from Red Hat Community and is used worldwide.
iv. Hibernate is easy to integrate with other Java EE frameworks
v. Hibernate supports caching that is better for performance
4. Node JS
a. Node.js is an extremely powerful JavaScript-based platform that’s built on Google Chrome's
JavaScript V8 Engine, used to develop I/O intensive web applications like video streaming
sites, single-page applications, online chat applications, and other web apps.
b. Node.js is used by large, established companies and newly-minted start-ups alike. Open-
source and completely free, the platform is used by thousands of developers around the
world. It brings plenty of advantages to the table, making it a better choice than other
server-side platforms like Java or PHP in many cases.
c. A web application, as you may already know, is a program that runs on a server and is
rendered by a client browser, using the internet to access all the resources of that
application. It usually can be easily broken down into three parts:
Client Server Database
The user interacts with the front- The server is The database stores the data
end part of a web application. The responsible for for a web application. The data
front-end is usually developed taking the client can be created, updated, and
using languages like HTML and CSS requests, deleted whenever the client
styles, along with extensive usage performing the requests. MySQL and MongoDB
of JavaScript-based frameworks required tasks, and are among the most popular
like ReactJS and Angular, which sending responses databases used to store data
help with application design. back to the clients. for web applications.
d. Node.js Server Architecture: Node.js uses the “Single Threaded Event Loop” architecture to
handle multiple concurrent clients. Node.js Processing Model is based on the JavaScript
event-based model along with the JavaScript callback mechanism.
e. Advantages of Node.js Architecture:
i. Handling multiple concurrent client requests is fast and easy
ii. No need for creating multiple threads
iii. Requires fewer resources and memory
5. Angular JS
a. AngularJS is an open-source Model-View-Controller framework that is similar to the
JavaScript framework. AngularJS is probably one of the most popular modern-day web
frameworks available today. This framework is used for developing mostly Single Page
applications. This framework has been developed by a group of developers from Google
itself.
b. The Architecture of AngularJS: AngularJS is built upon the MVC design pattern. The
principles behind the MVC architecture are very well incorporated in AngularJS. One might
have known MVC to be a robust architecture for many server-side languages. AngularJS
amalgamated the MVC pattern on the client-side as well.
Model The lowest level of the pattern which is responsible for maintaining data.
View This is responsible for displaying all or a portion of the data to the user.
Controller Software Code that controls the interactions between the Model and View.
c. AngularJS Advantages:
i. Since it’s an open source framework, you can expect the number of errors or issues to be
minimal.
ii. Two-way binding – Angular.js keeps the data and presentation layer in sync.
iii. Routing – Angular can take care of routing which means moving from one view to
iii. Routing – Angular can take care of routing which means moving from one view to
another.
iv. Angular supports testing, both Unit Testing, and Integration Testing.
6. J2EE: Java 2 Platform Enterprise Edition (J2EE) is a specification for a collection of software
components to enable development of multi-tiered web-based applications. These software
components include servlets, Java Server Pages (JSPs), and Enterprise Java Beans (EJBs)
The platform is based on a standard 3-tier architecture:
client tier (typically a web browser) (typically a web browser)
middle tier (the focus of J2EE)
Enterprise Information System (EIS) tier (databases, ERP, or legacy applications)
a. JSP:
i. Java Server Pages (JSP) is a technology for developing Webpages that supports
dynamic content. This helps developers insert java code in HTML pages by making use
of special JSP tags, most of which start with <% and end with %>
ii. A Java Server Pages component is a type of Java servlet that is designed to fulfill the
role of a user interface for a Java web application
iii. Using JSP, you can collect input from users through Webpage forms, present records
from a database or another source, and create Webpages dynamically.
iv. Advantages of JSP
1) Coding in JSP is easy :- As it is just adding JAVA code to HTML/XML.
2) Reduction in the length of Code :- In JSP we use action tags, custom tags etc.
3) Connection to Database is easier
4) No Redeployment and No Re-Compilation :- It is dynamic
5) Portable, Powerful, flexible and easy to maintain
a. Servlets
i. Servlet technology is used to create a web application (resides at server side and
generates a dynamic web page). Servlet technology is robust and scalable because of
java language.
For example, we can use a Servlet to collect input from a user through an HTML form,
query records from a database, and create web pages dynamically.
ii. Servlets are under the control of another Java application called a Servlet Container.
When an application running in a web server receives a request, the Server hands the
request to the Servlet Container – which in turn passes it to the target Servlet.
iii. Advantages of Servlet
1) Better performance: because it creates a thread for each request, not process.
2) Portability: because it uses Java language.
3) Robust: JVM manages Servlets, so we don't need to worry about the memory
leak, garbage collection, etc.
4) Secure: because it uses java language.
5) Servlets are server independent, as they are compatible with any web server.
b. EJBs
i. EJB is an acronym for enterprise java bean. It is a specification provided by Sun
Microsystems to develop secured, robust and scalable distributed applications.
ii. To run EJB application, you need an application server (EJB Container) such as Jboss,
Glassfish, Weblogic, Websphere etc. It performs:
1) life cycle management,
2) security,
3) transaction management, and
4) object pooling.
iii. Types of Enterprise Java Bean
Session Bean Session bean contains business logic that can be invoked by local,
remote or webservice client.
Message Like Session Bean, it contains the business logic but it is invoked by
Driven Bean passing message.
Entity Bean It encapsulates the state that can be persisted in the database. It is
deprecated. Now, it is replaced with JPA (Java Persistent API).
iv. Difference between RMI(point 7d) and EJB
RMI EJB
In RMI, middleware services such as security, In EJB, middleware services are
transaction management, object pooling etc. need provided by EJB Container
to be done by the java programmer. automatically.
RMI is not a server-side component. It is not EJB is a server-side
required to be deployed on the server. component, it is required to be
deployed on the server.
RMI is built on the top of socket programming. EJB technology is built on the
top of RMI.
7. Middleware:
Middleware is software that enables one or more kinds of communication or connectivity
between two or more applications or application components in a distributed network. By
making it easier to connect applications that weren't designed to connect with one another - and
providing functionality to connect them in intelligent ways - middleware streamlines application
development and speeds time to market.
At the most basic level, middleware enables developers to build applications without having to
create a custom integration every time they need to connect to application components (services
create a custom integration every time they need to connect to application components (services
or microservices), data sources, computing resources or devices.
a. JDBC
i. JDBC stands for Java Database Connectivity. JDBC is a Java API to connect and
execute the query with the database. It is a part of JavaSE (Java Standard Edition).
JDBC API uses JDBC drivers to connect with the database. There are four types of JDBC
drivers:
• JDBC-ODBC Bridge Driver,
• Native Driver,
• Network Protocol Driver, and
• Thin Driver
ii. We can use JDBC API to access tabular data stored in any relational database. By the
help of JDBC API, we can save, update, delete and fetch data from the database. It is
like Open Database Connectivity (ODBC) provided by Microsoft
iii. JDBC can be used to:
1) Connect to the database
2) Execute queries and update statements to the database
3) Retrieve the result received from the database.
b. JNDI
i. JNDI stands for Java Naming and Directory Interface. JNDI is an API that provides
naming and directory functionality to Java applications. It can be used in distributed
systems so that even if a system has multiple servers, all the servers can share
information.
ii. For example, you can store configuration data such as IP addresses of application
servers in a JNDI directory, and applications can access it.
iii. Functionality provided by JNDI: JNDI can store and retrieve configuration information
for an enterprise bean or any other application. It uses a client-side API to let
applications perform directory operations such as binding or unbinding an enterprise
bean to a JNDI directory.
Benefits Limitations
You can write programs using JNDI APIs Only certain types of data can be stored
without knowing how your application’s using the standard set method provided
data is stored in a directory service. by JNDI, and data such as configuration
information does not fit into this model.
You can write code to access data on a There is no provision for transactions.
iv. single machine or across multiple
systems, as long as the resources are
accessible from a JNDI directory.
You can write programs using JNDI in any No built-in security model is provided,
programming language that provides a although some implementations provide
JNDI API. APIs to set up SSL connections to
JNDI API. APIs to set up SSL connections to
directory servers.
c. JMS
i. JMS (Java Message Service) is an API that provides the facility to create, send and read
messages. It provides loosely coupled, reliable and asynchronous communication.
ii. JMS is also known as a messaging service.
iii. JMS is mainly used to send and receive message from one application to another.
iv. Requirement of JMS
i. Generally, user sends message to application. But, if we want to send message
from one application to another, we need to use JMS API.
ii. Consider a scenario, one application A is running in INDIA and another
application B is running in USA. To send message from A application to B, we
need to use JMS.
v. Messaging Domains: There are two types of messaging domains in JMS.
Point-to-Point (PTP) Messaging In PTP model, one message is delivered to one
Domain receiver only.
Here, Queue is used as a message oriented
middleware (MOM). The Queue is responsible to
hold the message until receiver is ready.
d. RMI
i. The RMI (Remote Method Invocation) is an API that provides a mechanism that allows
an object residing in one system (JVM) to access/invoke an object running on another
JVM.
ii. RMI is used to build distributed applications; it provides remote communication
between Java programs. It is provided in the package java.rmi.
iii. Architecture of an RMI Application: In an RMI application, we write two programs, a
server program (resides on the server) and a client program (resides on the client).
The following diagram shows the architecture of an RMI application,
Transport Layer This layer connects the client and the server. It manages the
existing connection and also sets up new connections.
Stub A stub is a representation (proxy) of the remote object at client. It
resides in the client system; it acts as a gateway for the client
program.
Skeleton This is the object which resides on the server side. stub
communicates with this skeleton to pass request to the remote
object.
RRL(Remote It is the layer which manages the references made by the client to
Reference Layer) the remote object.
iv. Difference between RMI and EJB
RMI EJB
In RMI, middleware services such as security, In EJB, middleware services are
transaction management, object pooling etc. need provided by EJB Container
to be done by the java programmer. automatically.
RMI is not a server-side component. It is not EJB is a server-side
required to be deployed on the server. component, it is required to be
deployed on the server.
RMI is built on the top of socket programming. EJB technology is built on the
top of RMI.
e. CORBA
i. Common Object Request Broker Architecture (CORBA) is a standard developed by
the Object Management Group to provide interoperability among distributed objects.
It is the world’s leading middleware solution. It enables the exchange of information,
independent hardware platforms, programming languages and operating systems. It
is often defined as “software bus” because it is a software based communication
interface through which the objects are located and accessed
ii. The CORBA Interface Definition Language, or IDL, allows the development of
language and location-independent interfaces to distributed objects.
iii. Using CORBA, application components can communicate with one another no matter
where they are located
iv. The illustration below identifies the primary components seen within a CORBA
implementation,
8. Role of UML in software architecture
a. UML, which stands for Unified Modeling Language, is a way to visually represent the
architecture, design, and implementation of complex software systems. When you’re
writing code, there are thousands of lines in an application, and it’s difficult to keep track of
the relationships and hierarchies within a software system. UML diagrams divide that
software system into components and subcomponents.
b. Why should you use UML diagrams?
UML is a standardized modeling language that can be used across different programming
languages and development processes, so the majority of software developers will
understand it and be able to apply it to their work.
c. UML diagrams can help engineering teams:
i. Bring new team members or developers switching teams up to speed quickly.
ii. Navigate source code.
iii. Plan out new features before any programming takes place.
iv. Communicate with technical and non-technical audiences more easily.
d. UML standards identify 13 types of diagrams that are divided into two groups:
i. Structural UML diagrams
ii. Behavioural UML diagrams
e. UML notation:
UNIT - 4
1. Architecture reuse
a. In most engineering disciplines, systems are designed by composing existing components
that have been used in other systems. Software engineering has been more focused on
original development but it is now recognized that to achieve better software, more quickly
and at lower cost, we need a design process that is based on systematic software reuse.
There has been a major switch to reuse-based development over the past 10 years.
b. Benefits of software reuse:
Accelerated Bringing a system to market as early as possible is often more
development important than overall development costs. Reusing software can
speed up system production.
Effective use of Instead of doing the same work over and over again, application
specialists specialists can develop reusable software that encapsulates their
knowledge.
Increased Reused software, which has been tried and tested in working systems,
dependability should be more dependable than new software.
Lower Development costs are proportional to the size of the software being
development costs developed. Reusing software means that fewer lines of code have to
be written.
c. Problems with software reuse:
i. If the source code of a reused software system or component is not available then
maintenance costs may be higher because the reused elements of the system may
become increasingly incompatible with system changes.
ii. Some software tools do not support development with reuse. It may be difficult or
impossible to integrate these tools with a component library system.
iii. Not-invented-here syndrome: Some software engineers prefer to rewrite
components because they believe they can improve on them. This is partly to do with
trust and partly to do with the fact that writing original software is seen as more
challenging than reusing other people's software.
UNIT - 5
2. Refinement
Refinement is the process of gradually disclosing information across a series of descriptions.
Architects need a way to carry out their designs and present information in a view in manageable
chunks. Refinement allows the architect to present information in separate, digestible pieces. A
refinement elaborates on (adds information to) an existing representation. Refinement allows the
architect to capture and present information with more or less detail. Less detail is useful in early
stages of design, and excellent for introductions, overviews, and early conceptualizing.
There are two important kinds of refinement:
a. Decomposition refinement is a refinement in which a single element is elaborated to reveal
its internal structure. Each member of that internal structure may be recursively refined.
Using decomposition refinements in a view carries an obligation to maintain consistency
with respect to the relation(s) native to that view. For example, suppose that the relation
shown in Figure 6.1(a) is send-data-to. Because element B is shown as both receiving and
sending data, the refinement of B in Figure 6.1(b) must show where data can enter and
leave B: in this case, via B1.
3. Context diagrams
1. The Context Diagram shows the system under consideration as a single high-level process
and then shows the relationship that the system has with other external entities (systems,
organizational groups, external data stores, etc.).
2. A top-level context diagram is a context diagram in which the scope is the entire system.
Entities in the environment may be humans, other computer systems, or physical objects,
such as sensors or controlled devices.
3. Another name for a Context Diagram is a Context-Level Data-Flow Diagram or a Level-0
Data Flow Diagram.
4. Context Diagrams were created for systems analysis and design. But like many analysis
tools they have been leveraged for other purposes. For example, they can also be
leveraged to capture and communicate the interactions and flow of data between business
processes. So, they don’t have to be restricted to systems analysis.
5. A Context Diagram provides no information about the timing, sequencing, or
synchronization of processes such as which processes occur in sequence or in parallel.
Therefore it should not be confused with a flowchart or process flow which can show these
things.
6. Some of the benefits of a Context Diagram are:
i. Shows the scope and boundaries of a system at a glance including the other systems
that interface with it
ii. No technical knowledge is assumed or required to understand the diagram
iii. Easy to draw and amend due to its limited notation
iv. Easy to expand by adding different levels of DFDs
v. Can benefit a wide audience including stakeholders, business analyst, data analysts,
developers
7. A sample Context Diagram is shown here
4. Variability
1. Variability in software-intensive systems is usually understood as the ability of a software
artifact to be changed in order to fit different contexts, environments, or purposes.
Software architecture on the other hand determines the structure of a software system,
and is described in an architecture description. This description includes the major
stakeholders of a software system and their concerns. Variability is reflected in and
facilitated through the software architecture.
2. Variability not only affects functionality but also the quality of software systems. For
example, variability in quality attributes can occur due to variations in different market
segments or customer profiles (e.g., premium customers may get better performance
compared to regular customers). In this scenario, performance requirements are “variation
points”.
3. We may not be able to predict all possible variants at design time since the complexity of
today's software systems and the behavior of users makes it impossible to predict all usage
scenarios. This requires adaptation at runtime and deferring the realization of variability
from design time to runtime.
4. In embedded systems, variability can either be handled in the software or the hardware
part. The software architecture must consider the resource constraints in embedded
systems when implementing variability. For example, it may not be feasible to implement
all possible variants in the software of an embedded system due to memory constraints.
5. The software architecture documentation is organized into different models and
architecture views. Thus, architects must be able to model variability in and across different
architecture models or views (e.g., logical or process views). At the same time we must
ensure consistency and traceability of variability from requirements to architecture to
implementation.
5. Software interfaces
1. The connection and interaction between hardware, software and the user. Users "talk to"
the software. The software "talks to" the hardware and other software. Hardware "talks to"
other hardware. All this is interfacing. It has to be designed, developed, tested and
redesigned; and with each incarnation, a new specification is born that may become yet
one more de facto or regulated standard.
2. Software interfaces (programming interfaces) are the languages, codes and messages that
programs use to communicate with each other and to the hardware. Examples are the
Windows, Mac and Linux operating systems, SMTP email, IP network protocols and the
software drivers that activate the peripheral devices.
3. Hardware interfaces are the plugs, sockets, cables and electrical signals traveling through
them. Examples are USB, FireWire, Ethernet, ATA/IDE, SCSI and PCI.
4. User interfaces are the keyboards, mice, commands and menus used for communication
between you and the computer. Examples are the command lines in DOS and Unix, and the
between you and the computer. Examples are the command lines in DOS and Unix, and the
graphical interfaces in Windows, Mac and Linux.