Software Fundamentals PDF
Document Details
Uploaded by GratifyingBlack5180
IBU
MSc. Aldin KOVAČEVIĆ
Tags
Summary
This document provides an introduction to software fundamentals, exploring system and application software, types, and programming languages. The content is categorized into various sections detailing features, examples, and concepts related to software. It is suitable for undergraduate-level learning.
Full Transcript
Introduction to Software Fundamentals Software is an essential part of any computing system, enabling devices to execute tasks and fulfill user requirements. Unlike hardware, which comprises the physical components, software is intangible and provides instructions that make the hardware operationa...
Introduction to Software Fundamentals Software is an essential part of any computing system, enabling devices to execute tasks and fulfill user requirements. Unlike hardware, which comprises the physical components, software is intangible and provides instructions that make the hardware operational. What is Software? Software is a collection of instructions, data, or programs that tell a computer how to work. It can be broadly categorized into: 1. System Software: ○ Manages hardware and provides foundational functionality for other software. ○ Examples: Operating systems (Windows, macOS, Linux), device drivers, and firmware. 2. Application Software: ○ Designed for end-users to perform specific tasks. ○ Examples: Web browsers, word processors, and communication tools. All software is written in programming languages and executed by a computer’s processor. System Software System software acts as a bridge between hardware and application software. It ensures the computer operates efficiently and supports user interactions. Features of System Software: Hardware Management: ○ Controls and allocates resources such as memory, CPU, and storage. User Interface: ○ Provides GUIs (graphical user interfaces) or CLIs (command-line interfaces). Application Platform: ○ Supports the execution of application software. Device Control: ○ Includes drivers for hardware communication. Security: ○ Provides basic security features like authentication and access control. Types of System Software: 1. Operating Systems: ○ Manages hardware and software resources and facilitates user interaction. ○ Examples: Windows, macOS, Linux, Android, and iOS. ○ Single Boot Systems: Run only one operating system at a time. 2 ○ Dual/Multi-Boot Systems: Allow multiple operating systems to coexist on a single machine, enabling users to choose which OS to boot during startup. 2. Device Drivers: ○ Specialized software that enables communication between the OS and hardware devices. 3. Firmware: ○ Embedded software in hardware, such as BIOS, that controls hardware functions. 4. Hypervisors: ○ Allow multiple operating systems to run on a single physical machine using virtualization. 5. Utility Programs: ○ Tools for system analysis, optimization, and maintenance. Examples: Disk Cleanup and antivirus software. Application Software Application software enables users to perform specific tasks, ranging from document creation to complex calculations and communication. Categories of Application Software: 1. Desktop Applications: ○ Installed on individual computers and run directly on the operating system. ○ Examples: Microsoft Office, Photoshop. 2. Web Applications: ○ Run within web browsers and do not require installation. ○ Examples: Gmail, Google Docs. 3. Native Applications: ○ Built for specific platforms, leveraging device features for optimized performance. ○ Examples: iMessage (iOS), Google Maps (Android). 4. Hybrid Applications: ○ Combine web and native technologies, offering cross-platform compatibility. ○ Examples: Instagram, Uber. 5. Cross-Platform Applications: ○ Designed to work on multiple platforms with a single codebase. ○ Examples: Slack, Facebook. Programming Languages and Levels 1. Machine Language: ○ Binary-coded instructions directly executed by the computer. ○ Extremely low-level and hardware-specific. 2. Assembly Language: ○ Uses mnemonics (keywords) for machine instructions, making it easier for humans to understand. 3 ○ Requires an assembler to translate into machine language. 3. High-Level Languages: ○ Abstractions over hardware, enabling problem-oriented programming. ○ Examples: Python, Java, C++. 4. Programming Paradigms: ○ Imperative Languages: Focus on how tasks are performed. Procedural: Organize tasks into procedures or functions (e.g., C, Python). Object-Oriented: Use objects to represent data and methods (e.g., Java, C++). ○ Declarative Languages: Focus on what the program should achieve. Functional: Use mathematical functions to handle computation (e.g., Haskell, Lisp). Logic-Based: Specify rules and relationships (e.g., Prolog). The Software Development Life Cycle (SDLC) The SDLC is a structured process for designing, developing, testing, and maintaining high-quality software. It minimizes risks and ensures the final product meets user requirements. Phases of SDLC: 1. Planning: ○ Defines project goals, feasibility, resources, and scheduling. ○ Outcome: A project plan and system request document. 2. Analysis: ○ Gathers and documents functional and non-functional requirements. ○ Outcome: Software Requirements Specification (SRS). 3. Design: ○ Outlines system architecture, user interfaces, and technical specifications. ○ Outcome: Design documents and mockups. 4. Implementation: ○ Converts designs into working code. ○ Developers break down requirements into manageable coding tasks. 5. Testing: ○ Ensures the software is error-free and meets requirements. ○ Methods: Unit testing, integration testing, performance testing, and user acceptance testing. 6. Deployment: ○ Delivers the software to users and transitions it to a production environment. 7. Maintenance: ○ Fixes bugs, releases updates, and monitors system performance. 4 SDLC Models Different SDLC models suit varying project requirements: 1. Waterfall Model: ○ Sequential phases with minimal iteration. ○ Best for small projects with stable requirements. 2. Iterative Model: ○ Develops software incrementally, incorporating user feedback. ○ Ideal for evolving systems. 3. Agile Model: ○ Emphasizes flexibility, collaboration, and iterative development. ○ Delivers working software in short cycles (sprints). ○ Why Agile is Preferred: Customer Collaboration: Frequent communication ensures the product meets user needs. Flexibility: Easily adapts to changes in requirements or priorities. Continuous Delivery: Regularly delivers small, functional increments of software. Enhanced Team Collaboration: Promotes shared responsibility and active engagement. Risk Reduction: Early detection of issues minimizes costly fixes later in the project. Conclusion Software is the driving force behind modern computing, enabling users to interact with hardware and perform tasks efficiently. Understanding its types, development processes, and programming paradigms is essential for creating and maintaining reliable, user-centered applications. 5