Structured Programming and Procedural Programming

Site: Saylor Academy
Course: CS105: Introduction to Python
Book: Structured Programming and Procedural Programming
Printed by: Guest user
Date: Thursday, April 25, 2024, 9:11 AM

Description

We have been learning, accessing, and applying methods available in Python (it would be impossible to teach Python without doing so). Although the syntax and use of these methods are inherently object-oriented, we have been using them in the context of procedural program design and in the form of structured programs. Recall that procedural programs use functions as a way of breaking a program down into a set of procedures to solve a problem. Read this page to learn why we have been arranging our programs the way we have.

Structured Programming

In the process of coding, the lines of code keep multiplying, thus, the size of the software increases. Gradually, it becomes next to impossible to remember the flow of the program. If one forgets how software and its underlying programs, files, and procedures are constructed, it then becomes very difficult to share, debug, and modify the program. The solution to this is structured programming. It encourages the developer to use subroutines and loops instead of using simple jumps in the code, thereby bringing clarity in the code and improving its efficiency structured programming also helps the programmer to reduce coding time and organize code properly.

Structured programming states how the program shall be coded. Structured programming uses three main concepts:

Top-down analysis - A software is always made to perform some rational work. This rational work is known as a problem in software parlance. Thus, it is very important that we understand how to solve the problem. Under top-down analysis, the problem is broken down into small pieces where each one has some significance. Each problem is individually solved and steps are clearly stated about how to solve the problem.

Modular Programming - While programming, the code is broken down into a smaller group of instructions. These groups are known as modules, subprograms, or subroutines. Modular programming based on the understanding of top-down analysis. It discourages jumps using 'goto' statements in the program, which often makes the program flow non-traceable. Jumps are prohibited and modular format is encouraged in structured programming.

Structured Coding - In reference to top-down analysis, structured coding sub-divides the modules into further smaller units of code in the order of their execution. Structured programming uses control structure, which controls the flow of the program, whereas structured coding uses control structure to organize its instructions in definable patterns.


Source: eVidhya, https://www.evidhya.com/tutorials/tutorials.php?qid=713/Software-Engineering-Basics/Software-Implementation
Creative Commons License This work is licensed under a Creative Commons Attribution 4.0 License.

Functional Programming

Functional programming is a style of programming language, which uses the concepts of mathematical functions. A function in mathematics should always produce the same result in receiving the same argument. In procedural languages, the flow of the program runs through procedures, i.e. the control of the program is transferred to the called procedure. While control flow is transferring from one procedure to another, the program changes its state.

In procedural programming, it is possible for a procedure to produce different results when it is called with the same argument, as the program itself can be in a different state while calling it. This is a property as well as a drawback of procedural programming, in which the sequence or timing of the procedure execution becomes important.

Functional programming provides means of computation as mathematical functions, which produces results irrespective of program state. This makes it possible to predict the behavior of the program.

Functional programming uses the following concepts:

First class and High-order functions - These functions have the capability to accept another function as an argument, or they return other functions as results.

Pure functions - These functions do not include destructive updates, that is, they do not affect any I/O or memory and if they are not in use, they can easily be removed without hampering the rest of the program.

Recursion - Recursion is a programming technique where a function calls itself and repeats the program code in it unless some pre-defined condition matches. Recursion is the way of creating loops in functional programming.

Strict evaluation - It is a method of evaluating the expression passed to a function as an argument. Functional programming has two types of evaluation methods, strict (eager) or non-strict (lazy). Strict evaluation always evaluates the expression before invoking the function. Non-strict evaluation does not evaluate the expression unless it is needed.

λ-calculus - Most functional programming languages use λ-calculus as their type systems. λ-expressions are executed by evaluating them as they occur.

Common Lisp, Scala, Haskell, Erlang, and F# are some examples of functional programming languages.

Programming Style

Programming style is a set of coding rules followed by all the programmers to write the code. When multiple programmers work on the same software project, they frequently need to work with the program code written by some other developer. This becomes tedious or at times impossible, if all developers do not follow some standard programming style to code the program.

An appropriate programming style includes using function and variable names relevant to the intended task, using well-placed indentation, commenting code for the convenience of the reader and the overall presentation of code. This makes the program code readable and understandable by all, which in turn makes debugging and error solving easier. Also, proper coding style helps ease the documentation and updation.

Coding Guidelines

The practice of coding style varies with organizations, operating systems, and the language of coding itself.

The following coding elements may be defined under the coding guidelines of an organization:

Naming conventions - This section defines how to name functions, variables, constants, and global variables.

Indenting - This is the space left at the beginning of a line, usually 2-8 whitespace or single tab.

Whitespace - It is generally omitted at the end of a line.

Operators - Defines the rules of writing mathematical, assignment, and logical operators. For example, assignment operator '=' should have space before and after it, as in "x = 2".

Control Structures - The rules of writing if-then-else, case-switch, while-until, and for control flow statements solely and in a nested fashion.

Line length and wrapping - Defines how many characters should be there in one line, mostly a line is 80 characters long. Wrapping defines how a line should be wrapped if is too long.

Functions - This defines how functions should be declared and invoked, with and without parameters.

Variables - This mentions how variables of different data types are declared and defined.

Comments - This is one of the important coding components, as the comments included in the code describe what the code actually does and all other associated descriptions. This section also helps in creating help documentation for other developers.

Software Documentation

Software documentation is an important part of the software process. A well-written document provides a great tool and means of information repository necessary to know about the software process. Software documentation also provides information about how to use the product.

Well-maintained documentation should involve the following documents:

Requirement documentation - This documentation works as a key tool for software designers, developers, and the test team to carry out their respective tasks. This document contains all the functional, non-functional, and behavioral descriptions of the intended software.

The source of this document can be previously stored data about the software, already running software at the client's end, client's interview, questionnaires, and research. Generally, it is stored in the form of a spreadsheet or word processing document with the high-end software management team.

This documentation works as a foundation for the software to be developed and is majorly used in the verification and validation phases. Most test cases are built directly from requirement documentation.

Software Design documentation - These documents contain all the necessary information, which is needed to build the software. It contains: (a) High-level software architecture, (b) Software design details, (c) Data flow diagrams, (d) Database design

These documents work as a repository for developers to implement the software. Though these documents do not give any details on how to code the program, they give all the necessary information that is required for coding and implementation.

Technical documentation - These documents are maintained by the developers and actual coders. These documents, as a whole, represent information about the code. While writing the code, the programmers also mention the objective of the code, who wrote it, where it will be required, what it does and how it does, what other resources the code uses, etc.

The technical documentation increases the understanding between various programmers working on the same code. It enhances the re-use capability of the code. It makes debugging easy and traceable.

There are various automated tools available and some come with the programming language itself. For example, java comes with a JavaDoc tool to generate technical documentation of code.

User documentation - This documentation is different from all the above explained. All previous documents are maintained to provide information about the software and its development process. But user documentation explains how the software product should work and how it should be used to get the desired results.

These documents may include software installation procedures, how-to guides, user guides, uninstallation methods, and special references to get more information like license updates, etc.

Software Implementation Challenges

There are some challenges faced by the development team while implementing the software. Some of them are mentioned below:

Code-reuse - Programming interfaces of present-day languages are very sophisticated and are equipped with huge library functions. Still, to bring the cost down of the end product, the organization management prefers to re-use the code, which was created earlier for some other software. There are huge issues faced by programmers for compatibility checks and deciding how much code to re-use.

Version Management - Every time new software is issued to the customer, developers have to maintain version and configuration related documentation. This documentation needs to be highly accurate and available on time.

Target-Host - The software program, which is being developed in the organization, needs to be designed for host machines at the customers' end. But at times, it is impossible to design a software that works on the target machines.