TEST 1 Flashcards
(182 cards)
What are the parts of software development?
Requirements, Design, Implementation, Testing and Debugging, Maintenance
What two things shape what design needs to meet
functional requirements and software quality metrics
What are design choices
ALGORITHM- what sequence operations is preformed DATA STRUCTURE- how information is represented COMPONENT DESIGN - how software is designed
Application Software
Software designed to solve specific tasks for users, typically written in a high level language
system software
software that interfaces between the application software and hardware (or lower layers of system software) ie runtime, operating, virtualization
hardware
physical resources such as memory (RAM), processing power (CPU), storage (disk), and I/O devices
What are the key components of programming languages
grammar, semantics, libraries
interpreter
a program that executes programs written in a language
complier
program that translates program language into another language (typically a binary)
what are the primary programming paradigms
Imperative, object- oriented, functional, declarative
imperative
series of statements that mutate programs state, these statements detail how to preform each operation – outputs can depend on combo of inputs and external states, side effects are allowed
functional
immutability, all functions are pure (no side effects, output soley depends on inputs)
cons of imperative
Behavior can be harder to understand
● Debugging can be more challenging
● Order is more crucial
Pros of imperative:
Efficient
● Familiar
● Parallels how computers actually work
Pros of functional
Proofs and analysis are easier
● Can be easier to test and debug
● Order of execution is less important
(easier to parallelize)
Cons of functional
Can sometimes be less efficient
Can’t use familiar constructs such as
loops
declarative
express logic of what without detailing its control flow how
Pros of more declarative:
Abstracts away the low-level details
● Equivalent code is typically shorter
● Self-documenting (goal is explicit)
Cons of more declarative:
Can sometimes be less efficient
● Gives the programmer less control
Is OOP imperative or functional, in terms of mutation
Can be either! Imperative is more common
Is OOP imperative or declarative, in terms of abstraction
Some argue declarative: once objects are defined, you can use
them abstractly without knowing how they work under the hood
I disagree; someone still has to define how they operate before
using them!
pros of OOP
High level of abstraction & encapsulation
● High level of modularity
● High level of extensibility & reusability
Static type system
type-checking happens at compile-time
○ Variables have types; type system checks that assigned values
match declared variable types
Dynamic type system
type-checking happens at runtime
○ Values have types; variable types are inferred from their values