1 / 52

Advanced Programming in Java

Advanced Programming in Java. Sadegh Aliakbary. Review. Java Programming Language Principles of Object Oriented Programming Characteristics of objects Encapsulation Objects in memory References Heap Stack Parameter Passing. Review (2). Initialization and Cleanup Constructor

rich
Download Presentation

Advanced Programming in Java

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Advanced Programming in Java SadeghAliakbary

  2. Review • Java Programming Language • Principles of Object Oriented Programming • Characteristics of objects • Encapsulation • Objects in memory • References • Heap • Stack • Parameter Passing Sharif University of Technology

  3. Review (2) • Initialization and Cleanup • Constructor • finalize() • Order of initialization • Initialization blocks • Access specifiers • Public • Private • Package access Sharif University of Technology

  4. Review (3) • Package • Static • The this reference • Method overloading • toString() • equals() • Refactoring • Bad smells • Refactoring techniques Sharif University of Technology

  5. Agenda • Software Quality • Characteristic of a good software • Test • Unit Testing • Refactoring Sharif University of Technology

  6. Quality of Product • The producer should ensure about the quality of the products • Quality Control • Any business, any product Sharif University of Technology

  7. A Cook Sharif University of Technology

  8. In surgery Sharif University of Technology

  9. A Car Maker Sharif University of Technology

  10. Quality Control • Quality should be tested • A product is not finalized, before the test • Different kinds of test, check different kinds of quality Sharif University of Technology

  11. Software Quality • We are programmers • Programmers produce software • What are characteristics of a good software? • Many parameters. E.g. • Conformance to requirements • Performance • Time • Memory • Maintainability • Changeability • Different kinds of test, check different kinds of quality Sharif University of Technology

  12. Test in Other Industries • Test side effects • A damage to the product • Test of a building • Test of a car • Test of a part of a product Sharif University of Technology

  13. Test Side Effects Sharif University of Technology

  14. What to do with Test Side Effects? • Testing a sample of the product • Simulation • Mathematical analysis • In software testing • Along with all of these techniques • And we can also test the software itself! • (Usually) no damage to the software Sharif University of Technology

  15. Test Target • System Test • Test the system as a whole • For performance, correctness and conformance. • Unit Test • Test the units and modules • Test of a component • Test of a class • Test of a method Sharif University of Technology

  16. How to Test Software • Manual Test • Try it! • Test Tools • Performance Test • Profiling • JProfiler, TPTP • Load Test • Jmeter • Test Code • Unit Tests • Test Teams Sharif University of Technology

  17. Test Code • Business Code • The code, written for implementation of a requirement • Test Code • The code, written for test of an implementation Sharif University of Technology

  18. Unit Testing • A process for the programmer • Not a test team procedure • For improving the code quality • Reduces bugs • Test of units of software • before the software is completed • Unit: method, class Sharif University of Technology

  19. Classical Unit Testing • Writing main() method • Some printlns • Drawbacks? Sharif University of Technology

  20. Drawbacks • Test code coupled with business code • In the same class • Written tests are discarded • One test at a time • The programmer executes the tests himself • Test execution is not automatic • The programmer should check the result of each test himself • The test is passed or failed? • The test result interpretation is not automatic Sharif University of Technology

  21. A Good Unit Test Code • Repeatable • Automatic • Invocation • Acceptance (Pass/Failure) • JUnit helps you write such tests Sharif University of Technology

  22. JUnit, First Example Sharif University of Technology

  23. JUnit, The Green Bar Sharif University of Technology

  24. publicclass Testing { @Test publicvoidtestNormal() { int[] array = {3,2,1,4}; int[] sorted = {1,2,3,4}; Business.sort(array); for (inti = 0; i < sorted.length; i++) { Assert.assertEquals(sorted[i], array[i]); } } @Test publicvoidtestEmptyArray() { int[] array = {}; try{ Business.sort(array); }catch(Exception e){ Assert.fail(); } Assert.assertNotNull(array); Assert.assertEquals(array.length, 0); } } Sharif University of Technology

  25. Assertions • assertNull(x) • assertNotNull(x) • assertTrue(boolean x) • assertFalse(boolean x) • assertEquals(x, y) • Uses x.equals(y) • assertSame(x, y) • Uses x ==y • assertNotSame • fail() Sharif University of Technology

  26. Annotations • @Test • @Before • @After • @BeforeClass • @AfterClass Sharif University of Technology

  27. Sharif University of Technology

  28. A Good Unit Test is • Automated • Through • Repeatable • Independence • Professional Sharif University of Technology

  29. Test Driven Development • Test First Development • Before writing a code, write the tests! Sharif University of Technology

  30. TDD Sharif University of Technology

  31. Refactoring

  32. Refactoring • A disciplined way to restructure code • In order to improve code quality • Without changing its behavior • a change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. Martin Fowler Sharif University of Technology

  33. Refactoring • Refactoring is the process of changing a software system • In such a way that it does not alter the external behavior of the code • But improves its internal structure • It is a disciplined way to clean up code • It minimizes the chances of introducing bugs • When you refactor, you are improving the design of the code after it has been written. Martin Fowler Sharif University of Technology

  34. Refactoring • By continuously improving the design of code, we make it easier and easier to work with Joshua Kerievsky, Refactoring to Patterns Sharif University of Technology

  35. Example • Duplicate Code • What are the drawbacks? • What is the solution? • Refactoring: • Finding a “Bad Smell” • Changing the code to remove the bad smell • Some well-known bad smells are reported Sharif University of Technology

  36. Bad Smell • A bad smell in code • Any symptom in the source code that possibly indicates a deeper problem. • The term is coined by Kent Beck. Sharif University of Technology

  37. Bad Smells • If it stinks, change it! • Kent Beck and Martin Fowler. • Bad smells in code • Bad smells are source of problems • Remove bad smells • How? • By Refactoring Sharif University of Technology

  38. Bad Smells • Duplicated Code • Long Method • Large Class • Long Parameter List • … Sharif University of Technology

  39. Refactoring Techniques • Extract Method • Move • Method • Variable • Class • Extract Class • Rename • Method • Variable • Class • Pull Up • Push Down Sharif University of Technology

  40. IDE Support • Refactoring techniques are widely supported by IDEs • Practice it in Eclipse Sharif University of Technology

  41. The Two Hats • Kent Beck's metaphor of two hats • Divide your time between two distinct activities • adding function • refactoring Sharif University of Technology

  42. Why Should I Refactor? • Refactoring Improves the Design of Software • Refactoring Makes Software Easier to Understand • Refactoring Helps You Find Bugs • Refactoring Helps You Program Faster • Refactoring makes your code more maintainable Sharif University of Technology

  43. When Should You Refactor? • The Rule of Three: • Refactor When You Add Function • Refactor When You Need to Fix a Bug • Refactor As You Do a Code Review Sharif University of Technology

  44. Scanner s = new Scanner(System.in); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int a1 = s.nextInt(); System.out.print("Enter the length: "); int a2 = s.nextInt(); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int b1 = s.nextInt(); System.out.print("Enter the length: "); int b2 = s.nextInt(); intx = a1*a2; inty = b1*b2; if(x == y) System.out.println("Equal"); Find bad smells! Refactor the Code! Sharif University of Technology

  45. Scanner scanner = new Scanner(System.in); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int width1 = scanner.nextInt(); System.out.print("Enter the length: "); int length1 = scanner.nextInt(); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int width2 = scanner.nextInt(); System.out.print("Enter the length: "); int length2 = scanner.nextInt(); int area1 = width1*length1; int area2 = width2*length2; if(area1 == area2) System.out.println("Equal"); Rename… Sharif University of Technology

  46. class Rectangle{ privateintlength , width; publicintgetLength() { returnlength; } publicvoidsetLength(int length) { this.length= length; } publicintgetWidth() { returnwidth; } publicvoidsetWidth(int width) { this.width= width; } publicRectangle(int length, int width) { this.length= length; this.width= width; } } Extract Class… Sharif University of Technology

  47. Scanner scanner = new Scanner(System.in); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); int width = scanner.nextInt(); System.out.print("Enter the length: "); int length = scanner.nextInt(); Rectangle rectangle1 = new Rectangle(length, width); System.out.println("Rectangle Info."); System.out.print("Enter the width: "); width = scanner.nextInt(); System.out.print("Enter the length: "); length = scanner.nextInt(); Rectangle rectangle2 = new Rectangle(length, width); int area1 = rectangle1.getWidth()*rectangle1.getLength(); int area2 = rectangle2.getWidth()*rectangle2.getLength(); if(area1 == area2) System.out.println("Equal"); Sharif University of Technology

  48. class Rectangle{ ... publicint area(){ returnlength * width; } } … int area1 = rectangle1.area(); int area2 = rectangle2.area(); Extract Method… Sharif University of Technology

  49. privatestatic Rectangle readRectangle(Scanner scanner) { intwidth; intlength; System.out.println("Rectangle Info."); System.out.print("Enter the width: "); width = scanner.nextInt(); System.out.print("Enter the length: "); length = scanner.nextInt(); Rectangle rectangle2 = new Rectangle(length, width); returnrectangle2; } Extract Method… Sharif University of Technology

  50. Refactored Code Scanner scanner = new Scanner(System.in); Rectangle rectangle1 = readRectangle(scanner); Rectangle rectangle2 = readRectangle(scanner); int area1 = rectangle1.area(); int area2 = rectangle2.area(); if(area1 == area2) System.out.println("Equal"); Sharif University of Technology

More Related