33
Adapted from Professor Tim Wood - The George Washington University CS 2113 Software Engineering The End.

CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Adapted from Professor Tim Wood - The George Washington University

CS 2113 Software Engineering

The End.

Page 2: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

The End is Near• This is our last class :(

• Homework 3 due Sunday May 5, at 11:59PM

• Final exam: Monday May 6, 10:20-12:20PM

• Today:• Threads/Networking• Software Engineering• Your future• Your skills

!2

Page 3: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Final Exam• Short answer (~25%)

• Java OOP, GUIs, Networking, Threading concepts• Small program (~30%)

• Basic java syntax, arrays, loops, logic• OOP program (~45%)

• Will involve GUIs, networking, and/or threads• (weights are only an approximation)

• I will give you: GUI/net/thread sample code

• You can bring: a double sided sheet of handwritten notes

!3

2 hours (shorter than midterm)

Page 4: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Exam Material• C - memory diagram (stack/heap/malloc/free)

• OOP• Inheritance, polymorphism, abstract, interfaces

• GUIs• Event handlers, Inner classes

• Networking/Files• Sockets, sending/receiving

• Multi-threading• Defining a thread’s task, starting threads

!4

Page 5: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Mental Model: OOP• Different parts of a car working together

• Engine object interacts with Axel objects• Multiple instances of Tire, SpareTire inherits from Tire, etc• Rim doesn’t care if you use Tire, SpareTire, or WinterTire

• Private Data and Public API• Best practice is to have a clean set of functions for other

components to interact with

• Most functions take objects as parameters• Not just simple data types

!5

Page 6: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Programming Practice• Pets!

!6

Page 7: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Mental Model: Inner Classes• A sub component for fine grain modularity

• Two main uses:• Event Listeners for GUI programming• Runnable classes for multi-threading

• Use these when you need to create several instances of a piece of functionality, but it depends heavily on other data in your class

!7

Page 8: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

GUI Inner Classes• Use an Inner Class

!8

class myPanel { private JLabel myLabel;

}

class eHandler1 implements ActionListener { myLabel.setText("Handler 1!");}

class eHandler2 implements ActionListener {}

class eHandler3 implements ActionListener {}

Page 9: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Network Inner Classes

!9

class EmailServer { private ArrayList<ClientHandler> clients;

public EmailServer { … Socket socket = srv.accept(); ClientHandler h = new ClientHandler(socket);

}

private class ClientHandler implements Runnable { private PrintWriter writer; private BufferedReader reader; private Socket socket;

private ClientHandler(Socket s) { … } public void run() { … }

}

Page 10: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

What can it do?• Can an inner class touch its outer's privates?

• Yes it can!• Can an outer class call functions in the inner?

• Yes it can!• Can an inner class implement an interface?

• Yes it can!• Can an inner class extend another class?

• Yes it can!• Can an inner class access local variables in

outside functions?• No it can’t!

!10

Page 11: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Mental Model: Threads• multiple cash registers versus 1, multiple lanes

• Workers + jobs

• Job = Some class that implements Runnable• run() ---> job to be done

• Worker = Thread object• Give a job when we start it

• A program always has at least 1 thread!• You can start more by creating a Thread object

!11

Page 12: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Programming Practice• Threaded Factoring

• Tips:

• Create a Thread and pass it a Runnable object

• Call the start() method of the thread object

• You can wait for a thread to end by calling its join() method

!12

# Threads Time (ms)

1

2

4

8

16

Page 13: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Mental Model: Networking• Postal system - send mail, receive mail• Power grid: electrical sockets

• stream of current in and stream of current out

• Socket: connection to somebody else• BufferedReader: input stream - waits for input!• PrintWriter: output stream, immediately sends!• protocol: how YOU define message ordering

!13

Page 14: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Programming Practice• Email Client

• Follow the protocol!• Authentic: send a string• Receive message list: read the number of messages, then two

strings per message• Ask user what message to read• Request message: send the message ID, then read the message

body string

• Why are we using DataStreams instead of BufferedReaders?

!14

Page 15: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Software Engineering• In this course...

• Programming "in the small"• for, if, while• Basic logic of each method

• Object oriented design• Classes, interfaces, inheritance• Sharing data

!15

Page 16: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Software Engineering• In the real world...

• Planning how to build software

• Managing the process of building software

• Testing that software works correctly

!16

Page 17: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

How to Plan a Project• Don't start by writing code

• It worked in CS1111 and CS1112• It will not work in your future classes• It will not work in your future career

• Think about structure and goals of your program• What are the main components?• What does do they need to do?• What are the main pieces of data?

• DO NOT:• Search google for something similar.

!17

Page 18: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Agile Development• Traditional software engineering (Waterfall)

• Spend a lot of time making a detailed design plan• Build the software following the plan• Release the software• Hope the software works and does what the client wanted

• Agile Development (Scrum)• Iterate between design and development• Each iteration produces a working prototype• Test code and communicate with client throughout process

!18

Page 19: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Version Control• You won't be the only person working on a

project• How to keep files in sync?

!19

Page 20: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Understandable Code• You will spend a lot of time reading other

people's code, and they will read yours

• Avoid:

!20

// Stupid Code 1:  int length= 0; 2:  for(int idx = 0; idx < a.length; i++){ 3:      length++; 4:  } 5:  System.out.println("length is : " + length);

// Misleading Codeif(a)if(b)x=y;elsex=z;

Page 21: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Understandable Code• Use reasonable names

!21

Page 22: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Testing• How do you know your code works?

• Unit testing• Simple tests for every component of your program• Eclipse can automatically run them• Easily verify that nothing breaks when you make a change

!22

Page 23: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Software Engineering• Course Summary

• Write code in multiple languages and understand the differences between them• Syntax, memory management, run time environment, etc

• Organize a project into components• Reuse code, improve maintainability and understandability

• Use advanced libraries and language features• Threads, networking, database connections, etc

!23

Page 24: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Get a Job• You are in a good field*• US News & Reports

Top 10 Jobs for 2012:1.Registered Nurse2.Software Developer3.Pharmacist4.Medical Assistant5.Database Administrator6.Web Developer7.Computer Systems Analyst8.Physical Therapist9.Computer Programmer10.Occupational Therapist

!24

Source: indeed.com

*unless you are one of the non-CS majors in the room

In 2019, Software Dev is #1!

Page 25: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Software Trends• Software is changing

!25

Then

Now

Page 26: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Language Trends

!26

Page 27: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Change is good• Technology is always changing• Some of the skills you are learning now will be

useless in 5 years

• Learn how to learn!

• Build a mental model of code and software• When to use a for/while/if/switch• How to move data between classes/files/networks• How to structure components to build an application

!27

Page 28: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Your future• You have <= 2 summers to build your resume

• Get an internship, join a research project, or learn to build things on your own!

• You need an experience or a piece of knowledge that will make you stand out• Good grades aren't enough

!28

Page 29: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Learn Android• Android apps are written in java!• You could be the next app store millionaire!

• Easy to get started: http://developer.android.com/sdk/index.html

• Install a custom version of Eclipse• Includes an emulator to test your apps in• Can also load your app onto your own phone

• If you register, you can release your app on the Google Play store

!29

Page 30: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

App Architecture• Android, iPhone, and many web frameworks

use the same program structure

• Benefits of this paradigm?

!30

Model

stores data

View

Displays GUI Controller

Updates View and Model

Page 31: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Learn Javascript• Has become a very popular language for web

applications

• Sadly javascript != java

• Buy a book, take an online class, read tutorials• Tons of libraries to let you build cool things

• three.js• node.js• jQuery• tracking.js• crafty

!31

Page 32: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

Evaluations• Fill online evaluations!

• I will send you a separate survey soon

• If you have any other feedback feel free to email me or come by my office

• How can we stay in touch?

!32

Page 33: CS 2113 Software Engineering · • Write code in multiple languages and understand the differences between them • Syntax, memory management, run time environment, etc • Organize

The End.• You have learned a lot (I hope)• You have practiced the craft of programming

• Write a program over summer• tell me what you do!

• Learn a new language, try a new library, modify an open source project, build better predators

!33