Principles ¡of ¡So3ware ¡Construc9on: ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Objects, ¡Design, ¡and ¡Concurrency ¡ ¡ Part ¡1: ¡Introduc9on ¡ ¡ Course ¡overview ¡and ¡introduc9on ¡to ¡so3ware ¡design ¡ ¡ Josh ¡Bloch ¡ ¡ Charlie ¡Garrod ¡ School ¡of ¡ ¡ Computer ¡Science ¡ 15-‑214 1
Growth ¡of ¡code—and ¡complexity—over ¡9me ¡ (informal reports) 15-‑214 2
15-‑214 15-313 Software Engineering 3 3
Normal night-time image Blackout of 2003 15-‑214 4
Principles ¡of ¡So3ware ¡Construc9on: ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Objects, ¡Design, ¡and ¡Concurrency ¡ ¡ Part ¡1: ¡Introduc9on ¡ ¡ Course ¡overview ¡and ¡introduc9on ¡to ¡so3ware ¡design ¡ ¡ Josh ¡Bloch ¡ ¡ Charlie ¡Garrod ¡ School ¡of ¡ ¡ Computer ¡Science ¡ 15-‑214 5
graph search primes binary tree GCD sorting BDDs 15-‑214 6
From ¡programs ¡to ¡systems ¡ Wri9ng ¡algorithms, ¡data ¡ Reuse ¡of ¡libraries, ¡ structures ¡from ¡scratch ¡ frameworks ¡ ¡ ¡ Func9ons ¡with ¡inputs ¡ ¡ Asynchronous ¡and ¡ ¡ and ¡outputs ¡ reac9ve ¡designs ¡ ¡ ¡ Sequen9al ¡and ¡local ¡ Parallel ¡and ¡distributed ¡ computa9on ¡ computa9on ¡ ¡ ¡ Full ¡func9onal ¡ Par9al, ¡composable, ¡ ¡ specifica9ons ¡ targeted ¡models ¡ Our goal: understanding both the building blocks and also the design principles for construction of software systems at scale 15-‑214 7
Principles ¡of ¡So3ware ¡Construc9on: ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Objects, ¡Design, ¡and ¡Concurrency ¡ ¡ Part ¡1: ¡Introduc9on ¡ ¡ Course ¡overview ¡and ¡introduc9on ¡to ¡so3ware ¡design ¡ ¡ Josh ¡Bloch ¡ ¡ Charlie ¡Garrod ¡ School ¡of ¡ ¡ Computer ¡Science ¡ 15-‑214 8
Objects ¡in ¡the ¡real ¡world ¡ 15-‑214 9
Object-‑oriented ¡programming ¡ • Programming ¡based ¡on ¡structures ¡ that ¡contain ¡both ¡data ¡and ¡methods ¡ public ¡class ¡Bicycle ¡{ ¡ ¡ ¡private ¡int ¡speed; ¡ ¡ ¡private ¡final ¡Wheel ¡frontWheel, ¡rearWheel; ¡ ¡ ¡private ¡final ¡Seat ¡seat; ¡ ¡ ¡… ¡ ¡ ¡ ¡public ¡Bicycle(…) ¡{ ¡… ¡} ¡ ¡ ¡ ¡public ¡void ¡accelerate() ¡{ ¡ ¡ ¡ ¡ ¡ ¡speed++; ¡ ¡ ¡ ¡} ¡ ¡ ¡ ¡public ¡int ¡getSpeed() ¡{ ¡return ¡speed; ¡} ¡ } ¡ 15-‑214 10
Principles ¡of ¡So3ware ¡Construc9on: ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ Objects, ¡Design, ¡and ¡Concurrency ¡ ¡ Part ¡1: ¡Introduc9on ¡ ¡ Course ¡overview ¡and ¡introduc9on ¡to ¡so3ware ¡design ¡ ¡ Josh ¡Bloch ¡ ¡ Charlie ¡Garrod ¡ School ¡of ¡ ¡ Computer ¡Science ¡ 15-‑214 11
Semester ¡overview ¡ Introduc9on ¡ Explicit ¡concurrency ¡ • • Design ¡goals, ¡principles, ¡paSerns ¡ Distributed ¡systems ¡ – • Design ing ¡classes ¡ • Design ¡for ¡change: ¡Subtype ¡polymorphism ¡ – CrosscuZng ¡topics: ¡ • and ¡informa9on ¡hiding ¡ Modern ¡development ¡tools: ¡IDEs, ¡version ¡ – Design ¡for ¡reuse: ¡inheritance ¡and ¡delega9on ¡ – control, ¡build ¡automa9on, ¡con9nuous ¡ Design ing ¡(sub)systems ¡ • integra9on, ¡sta9c ¡analysis ¡ Modeling ¡and ¡specifica9on, ¡formal ¡and ¡ What ¡to ¡build: ¡Domain ¡models, ¡system ¡ – – informal ¡ sequence ¡diagrams ¡ Assigning ¡responsibili9es: ¡GRASP ¡paSerns ¡ Func9onal ¡correctness: ¡Tes9ng, ¡sta9c ¡ – – analysis, ¡verifica9on ¡ Design ¡for ¡robustness: ¡Excep9ons, ¡modular ¡ – protec9on ¡ Design ¡for ¡change ¡(2): ¡Façade, ¡Adapter, ¡ – Observer ¡ Design ¡case ¡studies ¡ • Graphical ¡user ¡interfaces ¡ – Streams, ¡I/O ¡ – Collec9ons ¡ – Design ¡for ¡large-‑scale ¡reuse ¡ • Libraries, ¡APIs, ¡ ¡ – Frameworks ¡ – Product ¡lines ¡ – 15-‑214 12
Sorting with a configurable order, version A ¡ void ¡sort(int[] ¡list, ¡boolean ¡ascending) ¡{ ¡ ¡ ¡ ¡… ¡ ¡ ¡ ¡ ¡boolean ¡mustSwap; ¡ ¡ ¡ ¡if ¡(ascending) ¡{ ¡ ¡ ¡ ¡ ¡ ¡ ¡mustSwap ¡= ¡list[i] ¡< ¡list[j]; ¡ ¡ ¡ ¡} ¡else ¡{ ¡ ¡ ¡ ¡ ¡ ¡ ¡mustSwap ¡= ¡list[i] ¡> ¡list[j]; ¡ ¡ ¡ ¡} ¡ ¡ ¡ ¡… ¡ } ¡ ¡ 15-‑214 13
Sorting with a configurable order, version B interface ¡Comparator ¡{ ¡ ¡ ¡boolean ¡compare(int ¡i, ¡int ¡j); ¡ } ¡ ¡ class ¡AscendingComparator ¡ ¡implements ¡Comparator ¡{ ¡ ¡ ¡boolean ¡compare(int ¡i, ¡int ¡j) ¡{ ¡return ¡i ¡< ¡j; ¡} ¡ } ¡ class ¡DescendingComparator ¡implements ¡Comparator ¡{ ¡ ¡ ¡boolean ¡compare(int ¡i, ¡int ¡j) ¡{ ¡return ¡i ¡> ¡j; ¡} ¡ } ¡ ¡ void ¡sort(int[] ¡list, ¡Comparator ¡cmp) ¡{ ¡ ¡ ¡… ¡ ¡ ¡ ¡boolean ¡mustSwap ¡= ¡ ¡ ¡ ¡ ¡cmp.compare(list[i], ¡list[j]); ¡ ¡ ¡… ¡ } ¡ 15-‑214 14
Sorting with a configurable order, version B' interface ¡Comparator ¡{ ¡ ¡ ¡boolean ¡compare(int ¡i, ¡int ¡j); ¡ } ¡ ¡ final ¡Comparator ¡ASCENDING ¡ ¡= ¡(i, ¡j) ¡-‑> ¡i ¡< ¡j; ¡ final ¡Comparator ¡DESCENDING ¡= ¡(i, ¡j) ¡-‑> ¡i ¡> ¡j; ¡ ¡ void ¡sort(int[] ¡list, ¡Comparator ¡cmp) ¡{ ¡ ¡ ¡… ¡ ¡ ¡ ¡boolean ¡mustSwap ¡= ¡ ¡ ¡ ¡ ¡cmp.compare(list[i], ¡list[j]); ¡ ¡ ¡… ¡ } ¡ 15-‑214 15
Which version is better? Version A: void ¡sort(int[] ¡list, ¡boolean ¡ascending) ¡{ ¡ ¡ ¡ ¡… ¡ ¡ ¡ ¡ ¡boolean ¡mustSwap; ¡ ¡ ¡ ¡if ¡(ascending) ¡{ ¡ ¡ ¡ ¡ ¡ ¡ ¡mustSwap ¡= ¡list[i] ¡< ¡list[j]; ¡ ¡ ¡ ¡} ¡else ¡{ ¡ ¡ ¡ ¡ ¡ ¡ ¡mustSwap ¡= ¡list[i] ¡> ¡list[j]; ¡ ¡ ¡ ¡} ¡ ¡ ¡ ¡… ¡ } ¡ Version B': interface ¡Comparator ¡{ ¡ ¡ ¡boolean ¡compare(int ¡i, ¡int ¡j); ¡ } ¡ final ¡Comparator ¡ASCENDING ¡= ¡ ¡(i, ¡j) ¡-‑> ¡i ¡< ¡j; ¡ final ¡Comparator ¡DESCENDING ¡= ¡(i, ¡j) ¡-‑> ¡i ¡> ¡j; ¡ ¡ void ¡sort(int[] ¡list, ¡Comparator ¡cmp) ¡{ ¡ ¡ ¡… ¡ ¡ ¡ ¡boolean ¡mustSwap ¡= ¡ ¡ ¡ ¡ ¡cmp.compare(list[i], ¡list[j]); ¡ ¡ ¡… ¡ } ¡ 15-‑214 16
It depends? 15-‑214 17
Software engineering is the branch of computer science that creates practical, cost-effective solutions to computing and information processing problems, preferably by applying scientific knowledge, developing software systems in the service of mankind. Software engineering entails making decisions under constraints of limited time, knowledge, and resources. […] Engineering quality resides in engineering judgment. […] Quality of the software product depends on the engineer’s faithfulness to the engineered artifact. […] Engineering requires reconciling conflicting constraints. […] Engineering skills improve as a result of careful systematic reflection on experience. […] Costs and time constraints matter, not just capability. […] Software Engineering for the 21st Century: A basis for rethinking the curriculum Manifesto, CMU-ISRI-05-108 15-‑214 18
So3ware ¡Engineering ¡(SE) ¡at ¡CMU ¡ • 15-‑214: ¡ ¡Code-‑level ¡design ¡ – Extensibility, ¡reuse, ¡concurrency, ¡func9onal ¡correctness ¡ • 15-‑313: ¡ ¡Human ¡aspects ¡of ¡so3ware ¡development ¡ – Requirements, ¡teamwork, ¡scalability, ¡security, ¡scheduling, ¡costs, ¡risks, ¡ business ¡models ¡ • 15-‑413 ¡Prac9cum, ¡17-‑413 ¡Seminar, ¡Internship ¡ • Various ¡Master's ¡level ¡courses ¡on ¡requirements, ¡architecture, ¡ so3ware ¡analysis, ¡etc. ¡ • SE ¡Minor: ¡hSp://isri.cmu.edu/educa9on/undergrad ¡ 15-‑214 19 19
Recommend
More recommend