ed milne - queen's universitypost.queensu.ca/~pcclub/programming.pdf · 2015-01-07 ·...
TRANSCRIPT
Programming
Ed Milne
Theme
● What is programming– How its done
– The tools that are used
Programming
● Software is the instructions which tell your computer what to do
● Programming is the process of creating software
UML
● Universal Modelling Language– Graphical way of describing program and
system logic
– Can also be used for manual procedures
● There is freeware available for creating UML diagrams
UML Example
Objects
● Objects are independent entities that perform specific functions within a program
● A program that uses an object does not have to know how an object works
Objects
● Objects can be reused in many programs– This reduces the programming effort
– If the object is successfully working in other programs it reduces the debugging effort
– Objects can also reduce the learning curve for software users
– e.g. the Open function in Windows programs
● Objects are used in other contexts such as word processing
– OLE = Object Linking and Embedding
Linking
● Programs are created as a series of separate modules rather than a single unit
● Linking resolves the addresses of the different modules so control can be passed between them
– The result of linking is an integrated program containing multiple modules
● A linker links the modules together
Dynamic Linking
● Some objects are linked into a program dynamically after it starts
– This reduces the time to start the program and the amount of RAM used
● Many programs have many options that are rarely used
● Dynamically linked modules are kept in Dynamic-Link Libraries (DLL) files
Programming Languages
● Used to tell the computer what to– This is source code of programs
● A major goal is to reduce the human effort needed to create programs
Machine Language
● Machine language is the code used by the CPU● This is just a series of bytes such as
– A0 12 FF 7E 3B
● Such code is time consuming to create and maintain
Assembly Language
● A human readable form of the machine language● There is usually a one-to-one relationship
between an assembly language source code and a machine instruction
● Assembly language is only used for the innermost loops where efficiency is critical
– It gives the finest control over the program instructions
Assembly Language
● An assembler converts the human readable code into machine code
● A disassembler converts machine code into human readable assembly language
Assembly Language Example
.text .globl main main: la $a0, query #First the query li $v0, 4 syscall li $v0, 5 #Read the input syscall move $t0, $v0 #store the value in a temporary variable #store the base values in $t1, $t2 # $t1 iterates from m-1 to 1 # $t2 maintains a counter of the number of coprimes less than m
sub $t1, $t0, 1 li $t2, 0 tot: blez $t1, done #termination condition move $a0, $t0 #Argument passing move $a1, $t1 #Argument passing jal gcd #to GCD function
Compiled Languages
● Compiled languages are higher level language● A compiler converts the source code into
machine code● A decompiler converts machine code into a
higher level language
Procedural Languages
● Before object orientated languages (OOP) procedural languages created a program as one complete unit
● Later versions were enhanced to create objects● The most common procedural languages were
COBOL and Fortran
COBOL
● COmmon Business Oriented Language is a procedural language used for business applications
● The syntax is based on the English language
COBOL Example
IDENTIFICATION DIVISION. PROGRAM-ID. TEST.ENVIRONMENT DIVISION.DATA DIVISION 01 some-record. 05 num PIC 9(10). 05 the-date. 10 the-year PIC 9(4). 10 the-month PIC 99. 10 the-day PIC 99.
PROCEDURE DIVISIONIF invalid-record IF no-more-records NEXT SENTENCE ELSE READ record-file AT END SET no-more-records TO TRUE.
FORTRAN
● FORmula TRANslating system is a procedural language used for numeric and scientific calculations
● The syntax is based on algebra
FORTRAN Exampleprogram average ! Read in some numbers and take the average ! As written, if there are no data points, an average of zero is returned ! While this may not be desired behaviour, it keeps this example simple implicit none real, dimension(:), allocatable :: points integer :: number_of_points real :: average_points=0., positive_average=0., negative_average=0. write (*,*) "Input number of points to average:" read (*,*) number_of_points allocate (points(number_of_points)) write (*,*) "Enter the points to average:" read (*,*) points
FORTRAN Example ! Take the average by summing points and dividing by number_of_points if (number_of_points > 0) average_points = sum(points) / number_of_points ! Now form average over positive and negative points only if (count(points > 0.) > 0) then positive_average = sum(points, points > 0.) / count(points > 0.) end if if (count(points < 0.) > 0) then negative_average = sum(points, points < 0.) / count(points < 0.) end if deallocate (points) ! Print result to terminal write (*,'(a,g12.4)') 'Average = ', average_points write (*,'(a,g12.4)') 'Average of positive points = ', positive_average write (*,'(a,g12.4)') 'Average of negative points = ', negative_average end program average
C● Dennis Ritchie of Bell Labs developed 3
programming languages which he called A, B and C
● C was a success– Enhanced versions were named C+ and C++
– C++ is the current standard for hard core programming such as operating systems
C++ Example
# include <stdio.h>
int main(void)
{
printf("hello, world\n");
}
BASIC
● Beginner's All-purpose Symbolic Instruction Code wad initialized designed to teach programming to students
● Variants of BASIC underlay Microsoft Office, Open Office and LibreOffice
● There are many versions of BASIC
BASIC ExamplePublic Class StarsProgram Public Shared Sub Main() Dim UserName, Answer, stars As String, NumStars As Integer Console.Write("What is your name: ") UserName = Console.ReadLine() Console.WriteLine("Hello {0}", UserName) Do Console.Write("How many stars do you want: ") NumStars = CInt(Console.ReadLine()) stars = New String("*", NumStars) Console.WriteLine(stars) Do Console.Write("Do you want more stars? ") Answer = Console.ReadLine() Loop Until Answer <> "" Answer = Answer.Substring(0, 1) Loop While Answer.ToUpper() = "Y" Console.WriteLine("Goodbye {0}", UserName) End SubEnd Class
Interpreters
● Interpreters directly execute source code without converting it to machine code
JavaScript
● JavaScript is an interpreted language used in web pages
● An interpreted language is required because– Web pages can only contain ASCII characters
● Pictures, sounds and videos are included by inserting a URL into the web page
● Special characters are included as strings of ASCII characters e.g. È for È
– Web designers want their pages to work on Widows, Linux, Mac, tablets and smart-phones without having to write separate versions for each type of device
JavaScript
● A JavaScript interpreter is included in web browsers
● JavaScript is a Write Once Run Anywhere (WORA) language
JavaScript Example
<!DOCTYPE html> <meta charset="utf-8"><title>Minimal Example</title> <h1 id="header">This is JavaScript</h1> <script> document.body.appendChild(document.createTextNode('Hello World!')); var h1 = document.getElementById('header'); // holds a reference to the <h1> tag h1 = document.getElementsByTagName('h1')[0]; // accessing the same <h1> element</script> <noscript>Your browser either does not support JavaScript, or has it turned off.</noscript>
Java
● Java is a combination of a compiled and interpreted language
– The source code is compiled into executable code for Java's virtual CPU
– The compiled code is executed by the Java Runtime Environment (JRE)
● JREs are available for many different systems
● Like JavaScript Java is a WORA language
Java
● Java was intended to protect computers from malware
– The programs run in sandbox which is isolated from the rest of the computer
– Hackers have taken this as a challenge and the JRE is under constant attack
Java Example
// This is an example of a single line comment using two slashes /* This is an example of a multiple line comment using the slash and asterisk. This type of comment can be used to hold a lot of information or deactivate code, but it is very important to remember to close the comment. */ package fibsandlies;import java.util.HashMap; * This is an example of a Javadoc comment; Javadoc can compile documentation * from this text. Javadoc comments must immediately precede the class, method, or field being documented. */public class FibCalculator extends Fibonacci implements Calculator { private static Map<Integer, Integer> memoized = new HashMap<Integer, Integer>();
Java Example * The main method written as follows is used by the JVM as a starting point for the program. */ public static void main(String[] args) { memoized.put(1, 1); memoized.put(2, 1); System.out.println(fibonacci(12)); //Get the 12th Fibonacci number and print to console } * An example of a method written in Java, wrapped in a class. * Given a non-negative number FIBINDEX, returns * the Nth Fibonacci number, where N equals FIBINDEX. * @param fibIndex The index of the Fibonacci number * @return The Fibonacci number */ public static int fibonacci(int fibIndex) { if (memoized.containsKey(fibIndex)) { return memoized.get(fibIndex); } else { int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2); memoized.put(fibIndex, answer); return answer; } }}
Debugging
● Most of the time and effort in programming is spent removing defects (bugs) rather than writing the code
● In spite of this, programs still have bugs– The combinations and permutations of
hardware and other software are too large to be tested
– Some software developers, like Microsoft, have their software send data back to them when it fails
● This lets them use their customers as unpaid testers
Macros
● Office and programs let you write code by recording your actions in a macro
LibreOffice IDE
● The Integrated Development Environment (IDE) lets you edit and test BASIC code
● The controls are– Compile – compiles the source code
● The LibreOffice Basic compiler is embedded in the application
– Run – executes the compiled code after a break
– Stop – stops executing the code
– Step Over – steps over the next instruction
– Step Into – execute the next instruction
LibreOffice IDE
– Step Out – returns to the previous routine in the current macro
– Breakpoint – stop executing when an instruction is reached or remove a breakpoint
– Enable Watch – displays the variables in the current macro
– Insert Source Text – inserts additional source code into the macro from a file
● In the large pane, you can edit the source code or enter new code
– You can find some useful functions online
LibreOffice Basic Function
Function SmallIntToText(ByVal n As Integer) As String REM by Andrew D. Pitonyak Dim sOneWords() Dim sTenWords() Dim s As String
If n > 999 Then Print "Warning, n = " & n & " which is too large!" Exit Function End If
sOneWords() = Array("zero", _ "one", "two", "three", "four", "five", _ "six", "seven", "eight", "nine", "ten", _ "eleven", "twelve", "thirteen", "fourteen", "fifteen", _ "sixteen", "seventeen", "eighteen", "nineteen", "twenty") sTenWords() = Array( "zero", "Ten", "twenty", "thirty", "fourty", _ "fifty", "sixty", "seventy", "eighty", "ninety")
LibreOffice Basic Function
s = "" If n > 99 Then s = sOneWords(Fix(n / 100)) & " hundred" n = n MOD 100 If n = 0 Then SmallIntToText = s Exit Function End If s = s & " " End If
If (n > 20) Then s = s & sTenWords(Fix(n / 10)) n = n MOD 10 If n = 0 Then SmallIntToText = s Exit Function End If s = s & " " End If
LibreOffice Basic Function
SmallIntToText = s & sOneWords(n)End Function