Software Construction in Java

Brought by: edX

Overview

This computer science course is the first of a two-course sequence about writing good software using modern software engineering techniques.

In this course, you will learn what software engineers mean by "good" code -- safe from bugs, easy to understand, and ready for change. You will also learn ways to make your code better, including testing, specifications, code review, exceptions, immutability, abstract data types, and interfaces.

This is a challenging and rigorous course that will help you take the next step on your way to becoming a skilled software engineer.

Photo by Wizou on Flickr. (CC BY) 2.0

Taught by

Rob Miller

Software Construction in Java
Go to course

Software Construction in Java

Brought by: edX

  • edX
  • Free
  • English
  • Certificate Not Available
  • Certain days
  • intermediate
  • English
8.1.2PHP Version657msRequest Duration2MBMemory UsageGET en/courses/{slug}Route
    • Booting (390ms)
    • Application (265ms)
    • 1 x Booting (59.45%)
      390.34ms
      1 x Application (40.31%)
      264.67ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET en/courses/{slug}
      middleware
      web, localize:en
      controller
      App\Http\Controllers\CourseController@show
      as
      en.courses.show
      namespace
      prefix
      /en
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      7 statements were executed10.35ms
      • select * from `courses` where `slug_en` = 'software-construction-in-java' limit 1
        8.22ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. software-construction-in-java
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-07-05 19:28:28' where `id` = 1682
        1.07ms/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-07-05 19:28:28
        • 1. 1682
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (1)
        230μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        170μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `institutions` where `institutions`.`id` in (3) and `institutions`.`deleted_at` is null
        210μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (1) and `providers`.`deleted_at` is null
        200μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 1674 limit 1
        250μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 1674
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Institution
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        OXOxnKvW0DoiyQbBQ2dVElC8tUzUGNeN5qC6SmGX
        locale
        en
        _previous
        array:1 [ "url" => "https://www.corspedia.com/en/courses/software-construction-in-java" ]
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /en/courses/software-construction-in-java
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "216.73.216.187" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "x-forwarded-for" => array:1 [ 0 => "216.73.216.187" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "95a943fdb94cac70-YYZ" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_CF_CONNECTING_IP" => "216.73.216.187" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_X_FORWARDED_FOR" => "216.73.216.187" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "95a943fdb94cac70-YYZ" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "20276" "REMOTE_ADDR" => "172.69.130.209" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/en/courses/software-construction-in-java" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1751743708.0707 "REQUEST_TIME" => 1751743708 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Sat, 05 Jul 2025 19:28:28 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6Im5ITG41K3EyWnk5RFFLZ045aFBKWWc9PSIsInZhbHVlIjoidDhoMS9zSlRQUjRZSWRXaWFHS2xXUWFmT215UkRwaVdFWnVsQm1sV1lxTWRoaTRQK1dLUkJPbGdnNkVzVEhCcDI2T2R0WldEN0dmcUw3QnB1dU1XTmhOK1JiSGF0QXZkVjFDelE1V0ZrYTJoYk04RlJqdmgydlNaV1NtcExzVmEiLCJtYWMiOiI4NGNjODE5YzMzMTNhNTE0YmYwNjAyMTgxMzJiOGNkNTJhYjc0YTZkNzM2Y2JlZWI1NDk1MzhjNTk0NGM2OTk2IiwidGFnIjoiIn0%3D; expires=Sat, 05 Jul 2025 21:28:28 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6Im5ITG41K3EyWnk5RFFLZ045aFBKWWc9PSIsInZhbHVlIjoidDhoMS9zSlRQUjRZSWRXaWFHS2xXUWFmT215UkRwaVdFWnVsQm1sV1lxTWRoaTRQK1dLUkJPbGdnNkVzVEhCcDI2T2R0W" 1 => "laravel_session=eyJpdiI6InBSVkp6Qk51clJkNmUvN015ZTNrRGc9PSIsInZhbHVlIjoiQklwc3RsUWFCZnJwQmN4R3pnQUNMckxOYlNaZlR4VGZjSWZEdVhBNGE5clJxRFN3YXg1cGw3TS9TUkh1Y3BIUkVIZXZJMHFWSjM0NGlLcVhuN1lxbUszVEQvU0REdGU4OXRuSVl0ZHhKOVpoem9malhBQnZRUHZSbzA3Z2ZoM3QiLCJtYWMiOiJmNDlmM2E2M2I3NDgwYjFlNmUxOTkzNjE0ZjhjN2YxM2FkZDU4N2MzYzQ4ZmE0MTJkMGIwZmUzMDU4NDEyMWEwIiwidGFnIjoiIn0%3D; expires=Sat, 05 Jul 2025 21:28:28 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6InBSVkp6Qk51clJkNmUvN015ZTNrRGc9PSIsInZhbHVlIjoiQklwc3RsUWFCZnJwQmN4R3pnQUNMckxOYlNaZlR4VGZjSWZEdVhBNGE5clJxRFN3YXg1cGw3TS9TUkh1Y3BIUkVI" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6Im5ITG41K3EyWnk5RFFLZ045aFBKWWc9PSIsInZhbHVlIjoidDhoMS9zSlRQUjRZSWRXaWFHS2xXUWFmT215UkRwaVdFWnVsQm1sV1lxTWRoaTRQK1dLUkJPbGdnNkVzVEhCcDI2T2R0WldEN0dmcUw3QnB1dU1XTmhOK1JiSGF0QXZkVjFDelE1V0ZrYTJoYk04RlJqdmgydlNaV1NtcExzVmEiLCJtYWMiOiI4NGNjODE5YzMzMTNhNTE0YmYwNjAyMTgxMzJiOGNkNTJhYjc0YTZkNzM2Y2JlZWI1NDk1MzhjNTk0NGM2OTk2IiwidGFnIjoiIn0%3D; expires=Sat, 05-Jul-2025 21:28:28 GMT; path=/XSRF-TOKEN=eyJpdiI6Im5ITG41K3EyWnk5RFFLZ045aFBKWWc9PSIsInZhbHVlIjoidDhoMS9zSlRQUjRZSWRXaWFHS2xXUWFmT215UkRwaVdFWnVsQm1sV1lxTWRoaTRQK1dLUkJPbGdnNkVzVEhCcDI2T2R0W" 1 => "laravel_session=eyJpdiI6InBSVkp6Qk51clJkNmUvN015ZTNrRGc9PSIsInZhbHVlIjoiQklwc3RsUWFCZnJwQmN4R3pnQUNMckxOYlNaZlR4VGZjSWZEdVhBNGE5clJxRFN3YXg1cGw3TS9TUkh1Y3BIUkVIZXZJMHFWSjM0NGlLcVhuN1lxbUszVEQvU0REdGU4OXRuSVl0ZHhKOVpoem9malhBQnZRUHZSbzA3Z2ZoM3QiLCJtYWMiOiJmNDlmM2E2M2I3NDgwYjFlNmUxOTkzNjE0ZjhjN2YxM2FkZDU4N2MzYzQ4ZmE0MTJkMGIwZmUzMDU4NDEyMWEwIiwidGFnIjoiIn0%3D; expires=Sat, 05-Jul-2025 21:28:28 GMT; path=/; httponlylaravel_session=eyJpdiI6InBSVkp6Qk51clJkNmUvN015ZTNrRGc9PSIsInZhbHVlIjoiQklwc3RsUWFCZnJwQmN4R3pnQUNMckxOYlNaZlR4VGZjSWZEdVhBNGE5clJxRFN3YXg1cGw3TS9TUkh1Y3BIUkVI" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "OXOxnKvW0DoiyQbBQ2dVElC8tUzUGNeN5qC6SmGX" "locale" => "en" "_previous" => array:1 [ "url" => "https://www.corspedia.com/en/courses/software-construction-in-java" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]